Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 09:40

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 11 июл 2019, 17:19 
Не в сети

Зарегистрирован: 15 мар 2018, 15:31
Сообщений: 48
Собираюсь переходить на версию 9.3 с версии 5.6.
В версии 5.6. использовал картинки в ячейках столбцов из ImageList и закрашивание выделенной ячейки нужным мне цветом. В версии 6.3 и выше предоставлена процедура "SelectionDrawParams", в которой можно выбирать цвет согласно темам Windows. Или что то в этом роде.
Мне же нужно выбирать свои цвета в строках и активных ячейках. Эти цвета пользователь может настраивать сам по своему усмотрению.
Если я изменю цвета к которым привыкли пользователи - меня порвут на ремни.

Суть вопроса: -процедура TDBGridEh(sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); замазывает картинки в ячейке, но оставляет нужные мне цвета выделения.
Если я закомментирую эту процедуру, картинки отрисовываются нормально, но мои цвета заменяются на стандартные синие из TdbGridEh.
Вопрос: - Можно ли вернуть нормальную отрисовку картинок с одновременным использованием процедуры DefaultDrawColumnCell.

Часть кода:
procedure Tfrm_LaunchProg.grProgsDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
inherited;
MyGridDrawColumnCell(Sender, Rect, DataCol, Column, State, False); // В своей процедуре я устанавливаю свои цвета.
TdbGridEh(sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); // Эта процедура "замазывает" картинки
end;

Прикладываю картинку где в верней части цвета грида, а в нижней части мои цвета но с "закрытыми" картинками.
Получается, что я не могу одновременно использовать свои цвета в процедуре DrawColumnCell, с одновременным использованием картинок в ячейках.

Картинки к ячейкам привязываю здесь из ImageList:

procedure Tfrm_LaunchProg.grProgsColumns1GetCellParams(Sender: TObject;
EditMode: Boolean; Params: TColCellParamsEh);
begin
inherited;
try
Params.ImageIndex := GetShellImage(Params.Text, False, false);
Params.BlankCell := Params.ImageIndex = -1;
except
end;
end;

Проект старый и огромный. Перерабатывать всё проблематично.
Надеюсь на совет разработчиков. Это баг или фича?

Спасибо.


Вложения:
Комментарий к файлу: Формы отличаются наличием или отсутствием процедуры "DefaultDrawColumnCell(Rect, DataCol, Column, State);"
Pictures.png
Pictures.png [ 49.78 KiB | Просмотров: 1112 ]
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 июл 2019, 15:50 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Попрбуйтие использовать событие TColumnEh.OnAdvDrawDataCell чтобы подменять цвет фона, при этом использовать стандартную функцию отрисовки

Код:
procedure TForm1.DBGridEh1AdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
  AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
  var Params: TColCellParamsEh; var Processed: Boolean);
begin

  if (Sender.SumList.RecNo mod 2 = 1) then
    Params.Background := clMenu;

  if (gdCurrent in Params.State) then
  begin
    Params.Background := clRed;
    Params.Font.Color := clYellow;
    Params.SuppressActiveCellColor := True;
  end;

  Sender.DefaultDrawColumnDataCell(Cell, AreaCell, Column, ARect, Params);

  Processed := True;
end;


Вложения:
sshot-47.png
sshot-47.png [ 27.7 KiB | Просмотров: 1065 ]

_________________
Best regards
EhLib support Team
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 июл 2019, 19:21 
Не в сети

Зарегистрирован: 15 мар 2018, 15:31
Сообщений: 48
В Вашем коде выделяется только ячейка находящаяся в фокусе. А как сделать что бы остальная строка то же закрашивалась?
Т.е. сделать строку целиком одним цветом, а ячейку в фокусе в этой строке - другим цветом.

Попробовал через TGridDrawState = set of (gdSelected, gdFocused, gdFixed, gdHotTrack, gdCurrent .... ); - Не получается...
...
Будет ли дорабатываться/исправляться процедура DefaultDrawColumnCell?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 июл 2019, 12:17 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

Цитата:
А как сделать что бы остальная строка то же закрашивалась?

Используйте проверку if Params.Row = DBGridEh1.Row then ...

Код:
procedure TForm1.DBGridEh1AdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
  AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
  var Params: TColCellParamsEh; var Processed: Boolean);
begin

  if (Sender.SumList.RecNo mod 2 = 1) then
    Params.Background := clMenu;

  if (gdCurrent in Params.State) then
  begin
    Params.Background := clRed;
    Params.Font.Color := clYellow;
    Params.SuppressActiveCellColor := True;
  end else if Params.Row = DBGridEh1.Row then
  begin
    Params.Background := ApproximateColor(clRed, clWindow, 200);
  end;

  Sender.DefaultDrawColumnDataCell(Cell, AreaCell, Column, ARect, Params);

  Processed := True;
end;


Вложение:
sshot-48.png
sshot-48.png [ 26.6 KiB | Просмотров: 1013 ]



Цитата:
Будет ли дорабатываться/исправляться процедура DefaultDrawColumnCell?

В ближайшее время подобную доработку выполнить не получится.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 19 июл 2019, 14:51 
Не в сети

Зарегистрирован: 15 мар 2018, 15:31
Сообщений: 48
Спасибо за советы!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB