Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
xokc

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
И ещё один вопрос. Не будет ли слишком накладно для ресурсов компа, если на форме (на PageControl) положить сразу штук 20 cxGrid`ов?  

Не проще ли попробовать самому? Мы ж не знаем, что у тебя за комп, СУБД и т.д.
P.S.
Застрелил-бы разработчика (или дизайнера?), если бы он мне попробовал впарить такой pagecontrol с 20-ю вкладками..

Всего записей: 477 | Зарегистр. 22-09-2002 | Отправлено: 22:49 18-09-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не проще ли попробовать самому? Мы ж не знаем, что у тебя за комп, СУБД и т.д.  

Дело не в субд и не конкретно в моём компе. Программа предназначена не для моего компа. А какие будут компы у пользователей.... Я понимаю, что современным компьютерам горы по плечо. Но всё же может у кого-нибудь был опыт работы с большим количеством гридов на одной форме.  
А лучше деже использовать один грид и много вьюх.
 

Цитата:
Застрелил-бы разработчика (или дизайнера?), если бы он мне попробовал впарить такой pagecontrol с 20-ю вкладками..

Вот и я про то же. Что можно придумать в этом случае "поудобнее" так сказать?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 23:03 18-09-2009
Sufferer



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если вкладок много, то можно попробовать реализовать через TcxVerticalGrid или TdxSideBar или действительно воспользоваться TcxTabControl с одним TcxGrid и кучей вьюх.

Всего записей: 271 | Зарегистр. 21-07-2001 | Отправлено: 10:33 19-09-2009
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вобще  интересно про ресурсы . У cxGrid при прокрутке даже 1000-3000 записей и 4-5 столбцов  одно ядро 3Гц полностью  занято  работой .

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 19:52 19-09-2009
FunCode



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
JohnSilver182

Цитата:
А вобще  интересно про ресурсы . У cxGrid при прокрутке даже 1000-3000 записей и 4-5 столбцов  одно ядро 3Гц полностью  занято  работой .
 

Возможно ... если куча полей, да еще куча обработчиков событий на столбцах ... а так такое количество при  7-10 столбцах не особо нагружает проц ... Да и тяжело это мерить - надо смотреть тип полей, размерность, поэтому скорее всего лучше рассматривать относительное сравнение насчет использования множества экземпляров cxGrid против одного cxGrid и множества View ....

Всего записей: 182 | Зарегистр. 22-10-2006 | Отправлено: 20:56 19-09-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Energot

Цитата:
 Отписал в личку.

Сори за задержку, не было времени здесь появляться. Посмотрю и постараюсь ответить ASAP.
 
Добавлено:
FunCode

Цитата:
Интересует следующая проблема: ...
Есть ли какая либо возможность при использовании скинов менять цвет фона кнопки ?  

В какой-то мере решить вашу проблему может установка свойства LookAndFeel.SkinName в nil, в случае, когда вам нужно изменить цвет фона кнопки, и вернуть его в сохраненное значение, когда кнопка должна отрисовываться стандартным для выбранного скина способом.
 
Добавлено:
JohnSilver182

Цитата:
А вобще  можно настройки Репозиториев выгружать \ загружать  в файл ??

Какие конкретно репозитории вас интересуют? У DevExpress их как минимум 4:
cxStyleRepository, cxGridViewRepository, cxEditRepository, cxBarScreenTipRepository.
 
Добавлено:
Cryogen2003

Цитата:
У кого-нибудь есть dll со всеми новыми скинами? А то, в dll из шапки кучу скинов не хватает

Обратитесь к автору этой dll, он же указан в шапке.
 
Добавлено:
JohnSilver182

Цитата:
А круче cxGrid который в девках ,  я не видел

А буквально полтора месяца назад у вас были совсем другие высказывания по поводу DevExpress:

Цитата:
Кстати  почему есть в cxGrid TcxCustomGridTableView.OnCellClick
Но нет гораздо  умного события на получения фокуса ячейки ??  
или

Цитата:
А  почему  в Девках  элементарные  вещи идут  через  тернии ????  

Это еще раз доказывает, что не стоит горячиться и торопиться с выводами, а нужно спокойно  
один раз разобраться и будет счастье

Цитата:
Кстати единственно что лутше  в Eh_DBGrid это поиск  по CTRL-F как в EXEL , в  "Девкином"  cxGrid этого нет .

Так это очень даже легко сделать используя встроенный механизм ExpressQuantumGrid - Incremental Search, подробнее: ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Incremental_Search.htm
 
 
Добавлено:
X11

Цитата:
Нужно по нажатию на Enter сохранить активный грид. ...
Но получается так, что нужно нажать Enter 2 раза.

Вызывайте метод Post не DataController'а а DataSet'a  
TcxGridDBTableView(TcxGridSite(ActiveControl).GridView).DataController.DataSource.Dataset.Post
 

Цитата:
Не будет ли слишком накладно для ресурсов компа, если на форме (на PageControl) положить сразу штук 20 cxGrid`ов?

Не должно. Но лучше использовать не PageControl, а уровни cxGrid (не подчиненные), и в них создать 20 TableView. Будет выглядеть как закладки похожие на PageControl. Подробнее:
ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_Custom_GridLevels.htm
Но я бы сделал всетаки один cxGrid с одним TableView, даже несмотря на специфические настройки.  
Во-первых, при добавлении нового справочника не нужно делать новый грид, а только Datset-DataSource.
Во-вторых, справочников со специфичными настройками не 20 штук, а гораздо меньше, так что для их (настроек) хранения можно очень успешно пользоваться cxGridViewRepository.  
В-третьих: Для специфических настроек редакторов в справочниках используйте cxEditRepository.
И в-четвертых: есть отличные функции <YourListTv>.ClearItems и <YourListTv>.DataController.CreateAllItems;
Т.е. при переключении активного справочника переключайте DataSource, вызываете эти функции, применяйте необходимые настройки из cxGridViewRepository и cxEditRepository. Немного больше кода, но достаточно гибко и нересурсоемко.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 22:22 19-09-2009
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Так это очень даже легко сделать используя встроенный механизм ExpressQuantumGrid - Incremental Search, подробнее: ms-help://borland.bds5/ExpressQuantumGrid6.BDS5/ExpressQuantumGrid6/IDH_cd_Incremental_Search.htm
 

А я вот  не понял .  Как это трактовать ?? Вроде не WWW....
 
 
Добавлено:

Цитата:
А вобще  можно настройки Репозиториев выгружать \ загружать  в файл ??
Какие конкретно репозитории вас интересуют? У DevExpress их как минимум 4:
cxStyleRepository, cxGridViewRepository, cxEditRepository, cxBarScreenTipRepository.  

Я  про cxStyleRepository хотел узнать

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 14:22 20-09-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182

Цитата:
А я вот  не понял .  Как это трактовать ?? Вроде не WWW....  

Это путь в Microsoft Document Explorer, который используется в качестве справочной системы начиная с BDS 2005, если не ошибаюсь.

Цитата:
А вобще  можно настройки Репозиториев выгружать \ загружать  в файл ?? ...  
Я  про cxStyleRepository хотел узнать

Можно. У TcxCustomStyleSheet есть два метода LoadStyleSheetsFromIniFile и SaveStyleSheetsToIniFile. Подробнее:
ms-help://borland.bds5/ExpressCrossPlatformLibrary.BDS5/ExpressCrossPlatformLibrary/IDH_Class_TcxCustomStyleSheet.htm
Если нужно сохранять свойства конкретного стиля, воспользуйтесь компонентом cxPropertiesStore и в нем выберите для сохранения необходимые стили.  
ms-help://borland.bds5/ExpressCrossPlatformLibrary.BDS5/ExpressCrossPlatformLibrary/IDH_Class_TcxPropertiesStore.htm
Такие операции выгрузки/загрузки в файл возможны как в RunTime так и в DesignTime.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 17:17 20-09-2009
gyani

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, подскажите как выставить настройки (min,max) ячеек cxGrid имеющих тип progressbar с ралличными значениями по строкам?

Всего записей: 10 | Зарегистр. 28-08-2009 | Отправлено: 20:28 20-09-2009
Granmer



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xokc

Цитата:
Granmer
Могу только сказать, что имею достаточно богатый опыт работы c Layout и у меня с ним проблем никогда не было. Правда и скины не юзал.

Да, похоже действительно проблема в скинах. Положив Layout без скинов c десяток разных компонентов, перетаскивал, создавал группы и т.п. - всё нормально. Как только подключил скины - сразу же дельфи повисла. Причём последовательность была такая: Добавил на форму LayoutControl - работает, положил в него компоненты - работает, положил dxLayoutLookAndFeelList (создав в нём dxLayoutSkinLookAndFeel1) - работает, а вот после этого добавляю dxSkinController и тут же Delphi виснет загрузив одно ядро по максимуму. Чем можно исправить такую досаду? Или придётся отказываться от Layout?
 
Добавлено:
gyani

Цитата:
Здравствуйте, подскажите как выставить настройки (min,max) ячеек cxGrid имеющих тип progressbar с ралличными значениями по строкам?

Например, создаешь на столбце с прогресс-барами обработчик события OnGetProperties и в нём меняешь свойства

Код:
 
TcxProgressBarProperties(AProperties).Max:=10;

Всего записей: 236 | Зарегистр. 20-08-2003 | Отправлено: 21:09 20-09-2009 | Исправлено: Granmer, 21:41 20-09-2009
gyani

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да спасибо нашел пример от разработчиков, более сложный но рабочий
Вопрос теперь в другом, я в потоке читаю инет файл и обновляю ProgressBar, но вот когда я пытаюсь обновить значение прогрессбара в гриде выскакивает ошибка(Acess violation at adress ...), подскажите в чем может быть дело?
 

Код:
  repeat
          Result := Result + Buff;
          FillChar(Buff, SizeOf(Buff), 0);
          InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
 
          Form1.cxProgressBar2.Position:=Form1.cxProgressBar2.Position+BytesRead;..работает
 
          size:=size+BytesRead;
          form1.cxGrid4DBTableView1.DataController.SetValue(0,3,size);//выдает ошибку практически в начале цикла
 
 
        until BytesRead = 0;

 
Вопрос решил, добавил  Synchronize(Sync); и обновление данных перенес в Syncб пока работает

Всего записей: 10 | Зарегистр. 28-08-2009 | Отправлено: 22:06 20-09-2009 | Исправлено: gyani, 23:13 20-09-2009
xokc

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Или придётся отказываться от Layout?  

Я бы лучше уж от скинов отказался.

Всего записей: 477 | Зарегистр. 22-09-2002 | Отправлено: 23:12 20-09-2009
korobovmax



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
xokc, +1.
 
---
 
Скоро выйдут новые лэйауты, просите разработчиков сейчас, пока не поздно.

Всего записей: 276 | Зарегистр. 23-01-2005 | Отправлено: 00:08 21-09-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vladman
Точно, так и сделаю. Спс, чего-то сразу не додумал, видимо пятница так действовала

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 10:41 21-09-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
X11
 
Цитата:
Даже не знаю, в каком направлении копать.
 
Попробуйте следующее:
 
Код:
Uses ShellAPI;
function GetFileAssociatedIcon(AFileName: TFileName): HIcon;
var
  vBuffer: array[0..2048] of char;
  vIconIndex: Word;
begin
  StrCopy(@vBuffer, PChar(AFileName));
  vIconIndex := 0;
  Result := ExtractAssociatedIcon(HInstance, vBuffer, vIconIndex);
end;
 
procedure <YourForm>.<YourcxGridTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
    TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  vIconHandle: HIcon;
begin
  if AViewInfo.Item = <YourcxGridTableViewFileImageColumn> then
    begin
      vIconHandle := GetFileAssociatedIcon(AViewInfo.GridRecord.Values[<YourcxGridTableViewFilePathColumn>.index]);
      DrawIcon(ACanvas.Handle, AViewInfo.ClientBounds.Left + 1, AViewInfo.ClientBounds.Top + 1, vIconHandle);
      ADone := True;
    end;
end;  

 
vladman, я подкорректировал немного твой код, чтобы работал:

Код:
 
function TfmEmailEdit.GetFileAssociatedIcon(AFileName: String): HIcon;
var
  vBuffer: array[0..MAX_PATH] of char;
  vIconIndex: Word;
begin
  StrCopy(@vBuffer, PChar(AFileName));
  vIconIndex := cxSpinEdit1.Value;
  Result := ExtractAssociatedIcon(Application.Handle, StrLCopy(vBuffer, PChar(AFileName), SizeOf(vBuffer)-1), vIconIndex);
end;
 
 
 
procedure TfmEmailEdit.dbgMailAttachmentsCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
Var
 val: boolean;
 vIconHandle: HIcon;
begin
    if (AViewInfo.Item = dbgMailAttachmentsIcon) then
      if FileExists(AViewInfo.GridRecord.Values[dbgMailAttachmentsNAME.Index]) then
        begin
          vIconHandle := GetFileAssociatedIcon(AViewInfo.GridRecord.Values[dbgMailAttachmentsNAME.Index]);
          DrawIcon(ACanvas.Handle, AViewInfo.ClientBounds.Left + 1, AViewInfo.ClientBounds.Top + 1, vIconHandle);
          ADone := True;
        end;
end;
 

 
Пиктограмма выводится в ячейку, но слишком большая, наверное 32х32, а как вывести в ячейку пиктограмму размером 16х16?
Изменение индекса пиктограммы
vIconIndex := cxSpinEdit1.Value;
не помогает. Или это нужно самому уже изменять ручками размер пиктограммы?
 
Добавлено:
И ещё. Если изменять высоту строк, например, то в ячейках с пиктограммами появляется всякий мусор.
 

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:39 21-09-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11

Цитата:
Пиктограмма выводится в ячейку, но слишком большая, наверное 32х32, а как вывести в ячейку пиктограмму размером 16х16?  

Исправьте функцию GetFileAssociatedIcon на следуюущую

Код:
function <YourForm>.GetFileAssociatedIcon(AFileName: TFileName): HIcon;
var
  vFileInfo : SHFILEINFO;
begin
  SHGetFileInfo(PChar(AFileName), 0, vFileInfo, SizeOf(vFileInfo), SHGFI_ICON or SHGFI_SMALLICON);
  Result := vFileInfo.hIcon;
end;

и замените вызов DrawIcon на DrawIconEx

Код:
DrawIconEx(ACanvas.Handle, AViewInfo.ClientBounds.Left + 1, AViewInfo.ClientBounds.Top + 1, vIconHandle, 16, 16, 0, 0, DI_NORMAL);

 

Цитата:
И ещё. Если изменять высоту строк, например, то в ячейках с пиктограммами появляется всякий мусор.  

Перед vIconHandle := GetFileAssociatedIcon... выполните два оператора

Код:
ACanvas.Brush.Color := clWhite;
ACanvas.FillRect(AViewInfo.Bounds)
;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 17:32 21-09-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 
Исправьте функцию GetFileAssociatedIcon на следуюущую  

Я уже использую эту:

Код:
 
function TfmEmailEdit.GetRegistryIconHandle(FileName: string): HICON;
var
  R: TRegistry;
  Alias, //псевдвним для расширения в реестре
  IconPath,Ext: string; //путь для файла с иконкой
  IconNum, //номер иконки в файле
  QPos: Integer; //позиция запятой в записи реестра
begin
  IconNum := 0;
  Ext:=ExtractFileExt(FileName);
  if (Ext='.exe') or (ext='.EXE') then ext:='.com';
 
  R := TRegistry.Create;
 
  try
    R.RootKey := HKEY_CLASSES_ROOT;
 
    //чтение псевданима
    if R.OpenKey('\' + Ext, True) then
      Alias := R.ReadString('');
    R.CloseKey;
 
    //чтение записи об иконке
    if R.OpenKey('\' + Alias + '\DefaultIcon', True) then
      IconPath := R.ReadString('');
    R.CloseKey;
 
    //поиск запятой
    QPos := Pos(',', IconPath);
 
    //чтение номера иконки в файле если она имеется
    if QPos <> 0 then
    begin
      IconNum := StrToInt(Copy(IconPath, QPos + 1, 4));
      IconPath := Copy(IconPath, 1, QPos - 1)
    end;
 
  finally
    R.Free;
  end;
 
  //передача хендлера иконки как результат выполнения
  Result := ExtractIcon(hInstance, PChar(IconPath), IconNum);
  if result=0 then
    Result:=LoadIcon(Hinstance,'NO_FILE');
end;
 

 
Здесь нет зависимости от наличия файла на диске.
 
Добавлено:
vladman, почему-то грид рисует в моём случае качество иконок ужасное
   
 
Использую DrawIconEx и иконки достаю из реестра с помощью GetRegistryIconHandle()
Что может быть не так в гриде или в функции GetRegistryIconHandle()?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 17:45 21-09-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
X11

Цитата:
Что может быть не так в гриде или в функции GetRegistryIconHandle()?

Это легко проверить, используя функцию получения иконки приведенную мною выше.
Скорее всего проблема именно в функции GetRegistryIconHandle(), которая также может возвращать иконку 32х32.
ЗЫ. На мой взгляд проблема вытаскивая иконок мало относится к теме данного топика.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 19:03 21-09-2009
Radio_Kat

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кто-нибуть использовал TcxDBTreeList версии 46 с Firebird ?  
 
у меня возникла проблемма при insert записи, если настроенн generatorField
в прошлой версии ( февральской ) всё работает нормально
с гридом тоже проблемм нет
а при использовании TcxDBTreeList возникает AV
 
пример проекта вот тут
http://rapidshare.com/files/283297082/sp_av_insert_generatorField.rar.html
 
может быть конечно зря грешу на devexpress, но там кажется не в чем ошибиться

Всего записей: 26 | Зарегистр. 02-06-2006 | Отправлено: 07:46 22-09-2009 | Исправлено: Radio_Kat, 08:10 22-09-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Radio_Kat
На какой строке падает ошибка?

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:59 22-09-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru