"EhLib.Com"
https://forum.ehlib.com/ru/

Процедура DefaultDrawColumnCell "съедает" картинки в ячейках
https://forum.ehlib.com/ru/viewtopic.php?f=4&t=2813
Страница 1 из 1

Автор:  Alexsashka [ 11 июл 2019, 17:19 ]
Заголовок сообщения:  Процедура DefaultDrawColumnCell "съедает" картинки в ячейках

Собираюсь переходить на версию 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 | Просмотров: 1129 ]

Автор:  EhLibSupport [ 15 июл 2019, 15:50 ]
Заголовок сообщения:  Re: Процедура DefaultDrawColumnCell "съедает" картинки в яче

Добрый день.

Попрбуйтие использовать событие 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 | Просмотров: 1082 ]

Автор:  Alexsashka [ 15 июл 2019, 19:21 ]
Заголовок сообщения:  Re: Процедура DefaultDrawColumnCell "съедает" картинки в яче

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

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

Автор:  EhLibSupport [ 19 июл 2019, 12:17 ]
Заголовок сообщения:  Re: Процедура DefaultDrawColumnCell "съедает" картинки в яче

Добрый день.

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

Используйте проверку 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 | Просмотров: 1030 ]



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

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

Автор:  Alexsashka [ 19 июл 2019, 14:51 ]
Заголовок сообщения:  Re: Процедура DefaultDrawColumnCell "съедает" картинки в яче

Спасибо за советы!

Страница 1 из 1 Часовой пояс: UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/