Подсветка определенных строк в dbgrib

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Подсветка определенных строк в dbgrib

Сообщение WAYFARER »

Задача такова: нужно подсветить другим цветом строку в dbgrid, одно из полей в которой принимает определенное значение. Бился сначала сам, не получилось, решения, что предлагаются в инете для Delphi не работают.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Угу. Есть такое.
Подсветка строк перебивается свойствами грида Color и AlternateColor. А вот колонки подсвечиваются нормально.
Для себя определил как решение - подсвечивать шрифт.
1.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

dunin
Чего то не получается у меня, можешь пример кода выложить?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Код: Выделить всё

var // опции программы
  ClrG1      : tColor = clWindow;
  ClrG2      : tColor = clInfoBk;
  ClrGSort   : tColor = clBtnFace;
  ClrGPodsvet: tColor = clRed;
  Podsvet    : boolean = True;
  PodsvetM   : integer = 5;
...

procedure TFulForm.DataGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var HoldColor: TColor;
begin
HoldColor := tRxDBGrid(Sender).Canvas.Font.Color;
if (not (gdFocused in State)) and (not (gdSelected in State))
  then begin
...
      if Podsvet and (MainForm.iFulData.FieldByName('PLATA').AsFloat >= PodsvetM) then tRxDBGrid(Sender).Canvas.Font.Color := ClrGPodsvet; //clRed;
      if (Column.FieldName='AUD_MINUT') or (Column.FieldName='AUD_PLATA')  then tRxDBGrid(Sender).Canvas.Font.Color := clGrayText;
...
end; // if (not (gdFocused in State))
tRxDBGrid(Sender).DefaultDrawColumnCell (Rect, DataCol, Column, State);
tRxDBGrid(Sender).Canvas.Font.Color := HoldColor;
end;

как-то так... :roll:
а колонку крашу по клику на заголовке

Код: Выделить всё

procedure TMainForm.GridTitleClick(Column: TColumn; Real: boolean = True);
  var i: integer;
    //NomerForSort: byte;
begin
if (Column = nil) then exit;

  for i:= 0 to tRxDBGrid(Column.Grid).Columns.Count-1
    do tRxDBGrid(Column.Grid).Columns[i].Color:= ClrG1;

  Column.Color:= ClrGSort;

  if Real then...
...
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

dunin
Спасибо, в целом принцип уяснил
Ответить