Елена Филиппова дата публикации 26-09-1999 00:00 Компонент TStringGrid - назначение цвета для каждой строки, вывод содержимого ячейки в несколько строкС помощью функции DrawText (Windows API), на событие TStringGrid.onDrawCell.
Причем, для того , чтобы длинная строка выводилась в ячейке в несколько строк,
необходимо явно добавить в нужные места символ перевода строки(CHR(13))
Примечание: В данном примере COLUMN_INVCOMING, COLUMN_MESSAGE и ROW_HEADER мои собственные
константы, с помощью которых я определяю что и каким цветом в TStringGrid надо рисовать. То есть
цвет меняется во всех строках кроме ROW_HEADER в ячейке с номером COLUMN_MESSAGE.
И цвет определяется значением ячейки с номером COLUMN_INCOMING.
procedure TFormHistory.ListHistoryDrawCell(Sender: TObject; Col,
Row: Integer; Rect: TRect; State: TGridDrawState);
Var
S : String;
DrawRect : TRect;
CurrentColor : TColor;
begin
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[row]:=(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;
[TStringGrid] [GDI, рисование на канве] [Отображение списков, сеток]
Обсуждение материала нет сообщений |