Code:

procedure TFormHistory.ListHistoryDrawCell(Sender: TObject; Col, Row: Integer;

         Rect: TRect; State: TGridDrawState);

var

S: string;

DrawRect: TRect;

CurrentColor: TColor;

begin

// Определяем цвет строки в зависимости типа Imcoming

if (Sender as TStrinGgrid).Cells[COLUMN_INCOMING , Row ] = '1' then

   CurrentColor:=clBlue

else

   CurrentColor:=clMaroon;

 

if (Sender as TStrinGgrid).Row = Row then

   CurrentColor := clHighlightText;

 

(Sender as TStrinGgrid).Canvas.font.color := CurrentColor;

S:= (Sender as TStrinGgrid).Cells[ Col, Row ];

if (Col = COLUMN_MESSAGE ) and (Row <> ROW_HEADER) then

begin

   if Length(S) > 0 then

   begin

     DrawRect:=Rect;

     DrawText((Sender as TStrinGgrid).Canvas.Handle, Pchar(S), Length(S),

     DrawRect, dt_calcrect or dt_wordbreak or dt_left );

     if (DrawRect.bottom - DrawRect.top) > (Sender as TStrinGgrid).RowHeights[Row] then

       (Sender as TStrinGgrid).RowHeights

:=(DrawRect.bottom - DrawRect.top)

     else

     begin

       DrawRect.Right:=Rect.Right;

       (Sender as TStrinGgrid).Canvas.FillRect( DrawRect );

       DrawText((Sender as TStrinGgrid).Canvas.Handle, Pchar(S),

                 Length(S), DrawRect, dt_wordbreak or dt_left);

     end;

   end;

end

else

   if Row <> ROW_HEADER then

     (Sender as TStrinGgrid).Canvas.Textout(rect.left+3, rect.top+3 , S );

end;

 

 

...вы можете попробовать использовать StringGrid. У него имеется свойство Objects, через которое вы можете назначать объекты. Создайте объект, содержащий переменную типа TColor, и назначьте это Objects[col,row], что позволит иметь к нему доступ в любое время. Назначьте событие OnDrawCell StringGrid, позволяющее рисовать текст ячейки правильного цвета. Чтобы убедиться, что ячейка выбрана, воспользуйтесь свойством Selection, содержащим то, что выбрал пользователь. Все это должно выглядеть приблизительно так:

 

Автор: Neil J. Rubenking

 

...если я щелкаю на любой ячейке StringGrid2, последняя выбранная ячейка в StringGrid1 становится синей...

 

Создайте обработчик (если он отсутствует) события сетки OnDrawCell и включите в него следующий код:

 

Ниже представлен юнит, который позволяет поместить текст в String Grid с символами различного цвета:

Автор: Alex Schlecht

 StringGrids / DBGrids с цветными ячейками смотрятся очень красиво, и Вы можете информировать пользователя о важных данных внутри Grid.

Совместимость: все версии Delphi

К сожалению, невозможно применить один и тот же метод к StringGrids и к DBGrids. Итак сперва рассмотрим как это сделать в StringGrid:

1. StringGrid

=============

Для раскрашивания будем использовать событие "OnDrawCell". Следующий код показывает, как сделать в Grid красный бэкраунд. Бэкграунд второй колонки будет зелёным.