mitkrivich Опубликовано 14 января, 2015 Опубликовано 14 января, 2015 Как можно высветить строку с данными в зависимости от условия другим цветом фона и шрифта, Наработки обычной Delphi не работают, поэтому зашел в тупик, подтолкните пож-ста.
1 Администраторы Brovin Yaroslav Опубликовано 14 января, 2015 Администраторы Опубликовано 14 января, 2015 Нужно: Повесить обработчик события на ручную отрисовку ячеек: TGrid.OnDrawColumnCell: В обработчике в зависимости от требуемой строки или данных, нарисовать задний фон ячейки Затем поверх выполнить обычное отображение содержимого ячейки type TOpenColumn = class (TColumn); procedure TForm8.StringGrid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); begin if Row mod 2 = 0 then begin // Выполняем закраску заднего фона Canvas.Fill.Color := TAlphaColorRec.Aliceblue; Canvas.FillRect(Bounds, 0, 0, AllCorners, 1); // Рисуем поверх обычное отображение содержимого ячейки TOpenColumn(Column).DefaultDrawCell(Canvas, Bounds, Row, Value, State); end; end; Для этого примера, у меня получилось так: Hevard и Alisson R Oliveira 2
0 mitkrivich Опубликовано 14 января, 2015 Автор Опубликовано 14 января, 2015 Спасибо, работает, только вот если стоит что все время показывать ячейку , то линия на этих ячейках прирывается
1 Администраторы Brovin Yaroslav Опубликовано 14 января, 2015 Администраторы Опубликовано 14 января, 2015 Вычтете из области отрисовки Bounds районы вертикальных и горизонтальных полос: InnerBounds := Bounds; InnerBounds.Left := Bounds.Left + 1; InnerBounds.Bottom := Bounds.Bottom - 1;
0 mitkrivich Опубликовано 15 января, 2015 Автор Опубликовано 15 января, 2015 Я имел ввиду горизонтальную полоску - текущей записи, она получается видимой только в строках, которые не переопределены, придется ее убрать, а есть ли какие то в гриде другие возможности индикации текущей записи?
1 Администраторы Brovin Yaroslav Опубликовано 16 января, 2015 Администраторы Опубликовано 16 января, 2015 Я же вам написал. Измените область отрисовки ячейки так, чтобы в нее не попадали границы ячейки, в том числе горизонтальные.
0 Yarpda Опубликовано 19 января, 2015 Опубликовано 19 января, 2015 Я имел ввиду горизонтальную полоску - текущей записи, она получается видимой только в строках, которые не переопределены, придется ее убрать, а есть ли какие то в гриде другие возможности индикации текущей записи? Как я понимаю тут имеется ввиду, что при выделении данной строки (options.rowselect = true) выделяются (голубым) только те ячейки, которые мы не перерисовывали сами методом DrawColumnCell. А хотелось бы чтобы они выделялись также. Меня тоже интересует этот вопрос.
0 Администраторы Brovin Yaroslav Опубликовано 19 января, 2015 Администраторы Опубликовано 19 января, 2015 У этого события TGrid.OnDrawColumnCell есть параметр const State: TGridDrawStates Который содержит указание выделена ли строка, выделена ячейка и в фокусе ячейка или нет. Используйте этот параметр для отрисовки выделения так, как вам нужно.
0 Yarpda Опубликовано 19 января, 2015 Опубликовано 19 января, 2015 Спасибо, все оказалось проще чем казалось... )
Вопрос
mitkrivich
Как можно высветить строку с данными в зависимости от условия другим цветом фона и шрифта,
Наработки обычной Delphi не работают, поэтому зашел в тупик, подтолкните пож-ста.
8 ответов на этот вопрос
Рекомендуемые сообщения