Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TStringGrid] Как подсветить задний фон ячейки в зависимости от данных?


mitkrivich

Вопрос

Как можно высветить строку с данными в зависимости от условия другим цветом фона и  шрифта,

Наработки обычной Delphi не работают, поэтому зашел в тупик, подтолкните пож-ста.

Ссылка на комментарий

Рекомендуемые сообщения

  • 1
  • Администраторы

Нужно:

  • Повесить обработчик события на ручную отрисовку ячеек: 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;

Для этого примера, у меня получилось так:

post-1-0-86035000-1421232166_thumb.png

Ссылка на комментарий
  • 1
  • Администраторы

Вычтете из области отрисовки Bounds районы вертикальных и горизонтальных полос:

InnerBounds := Bounds;
InnerBounds.Left := Bounds.Left + 1;
InnerBounds.Bottom := Bounds.Bottom - 1;
Ссылка на комментарий
  • 0

Я имел ввиду горизонтальную полоску  - текущей записи, она получается видимой только в строках, которые не переопределены, 

придется ее убрать, а есть ли какие то в гриде другие возможности индикации текущей записи?

Ссылка на комментарий
  • 1
  • Администраторы

Я же вам написал. Измените область отрисовки ячейки так, чтобы в нее не попадали границы ячейки, в том числе горизонтальные.

post-1-0-83810100-1421414471_thumb.png

Ссылка на комментарий
  • 0

Я имел ввиду горизонтальную полоску  - текущей записи, она получается видимой только в строках, которые не переопределены, 

придется ее убрать, а есть ли какие то в гриде другие возможности индикации текущей записи?

Как я понимаю тут имеется ввиду, что при выделении данной строки (options.rowselect = true) выделяются (голубым) только те ячейки, которые мы не перерисовывали сами методом DrawColumnCell. А хотелось бы чтобы они выделялись также.

Меня тоже интересует этот вопрос.

Ссылка на комментарий
  • 0
  • Администраторы

У этого события TGrid.OnDrawColumnCell есть параметр 

const State: TGridDrawStates

Который содержит указание выделена ли строка, выделена ячейка и в фокусе ячейка или нет.

Используйте этот параметр для отрисовки выделения так, как вам нужно. 

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...