Valew, estava colocando zero nas posições. Agora deu certo dessa maneira.

procedure TfrmAPMovHorarios.stgHorarioMontanteDrawCell(Sender: TObject;
ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var ColorOld : TColor;

     ColorPen : TColor;

     TheText  : String;

begin

      if ((ACol = 1) and (ARow = 1)) or

         ((ACol = 1) and (ARow = 3)) or

         ((ACol = 1) and (ARow = 5)) then

      begin

            ColorOld := stgHorarioMontante.Canvas.Brush.Color;

            ColorPen := stgHorarioMontante.Canvas.Pen.Color;

 

            stgHorarioMontante.Canvas.Brush.Color := clRed;

            stgHorarioMontante.Canvas.Pen.Color   := clBlack;

 

            TheText := stgHorarioMontante.Cells[ACol, ARow];

            stgHorarioMontante.Canvas.TextRect(Rect,Rect.Left, Rect.Top  +
(Rect.Bottom - Rect.Top - stgHorarioMontante.Canvas.TextHeight(TheText)) div
2, TheText);

 

            stgHorarioMontante.Canvas.Brush.Color := ColorOld;

            stgHorarioMontante.Canvas.Pen.Color   := ColorPen;

      end;

end;

 

Tive de fazer o mesmo meses atrás. Eu mandaria meu código, mas ele
não ficou grande coisa.
O que eu fiz foi derivar um componente a partir da TStringGrid,
incluir um array bidimensional para as cores das células, e reescrever
o método DrawCell pra pintar as células ANTES de colocar o texto.

Meu método DrawCell ficou assim:

var TheText : String;
begin
if (ACol > 0) and (ARow > 0) then
begin
DefaultDrawing := True;
Canvas.brush.Color := arrayColors[ARow, ACol];
Canvas.FillRect(ARect);
end;
TheText := Cells[ACol, ARow];
with ARect, Canvas do
TextRect(ARect, Left + (Right - Left - TextWidth(TheText)) div 2,
Top + (Bottom - Top - TextHeight(TheText)) div 2, TheText);
end;

onde arrayColors é, obviamente, o array bidimensional de TColor.






[As partes desta mensagem que não continham texto foram removidas]

Responder a