"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; Проект старый и огромный. Перерабатывать всё проблематично. Надеюсь на совет разработчиков. Это баг или фича? Спасибо.
|
Автор: | 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;
|
Автор: | 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 [ 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/ |