Delphi - Pintar fila de un StringGrid

 
Vista:

Pintar fila de un StringGrid

Publicado por Martin (30 intervenciones) el 19/05/2003 18:14:44
Hola a todos, necesito una manito, como puedo hacer para pintar el back o el font de una fila en un string grid, he buscado en todos lados y no lo puedo solucionar. Estoy usando Delphi 7.

Muchas gracias.

Martin
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pintar fila de un StringGrid

Publicado por Ernesto De Spirito (706 intervenciones) el 19/05/2003 21:46:46
Para pintar las celdas de un StringGrid a total arbitrio es necesario asignar el evento OnDrawCell y usar los métodos del Canvas del StringGrid. Aquí va un ejemplo:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
TempRect: TRect;
begin
with Sender as TStringGrid do begin
if gdFixed in State then begin
Canvas.Brush.Color := FixedColor;
Canvas.Font.Color := clWindowText;
Canvas.Font.Style := [fsBold];
end else if gdSelected in State then begin
Canvas.Brush.Color := clHighlight;
Canvas.Font.Color := clHighlightText;
Canvas.Font.Style := [];
end else if ((ARow + FixedRows) And 1) <> 0 then begin
Canvas.Brush.Color := $00DDFFFF;
Canvas.Font.Color := clWindowText;
Canvas.Font.Style := [];
end else begin
Canvas.Brush.Color := $00DDEEFF;
Canvas.Font.Color := clWindowText;
Canvas.Font.Style := [];
end;
Canvas.FillRect(Rect);
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol,ARow]);
if gdFocused in State then
Canvas.DrawFocusRect(Rect)
else if (gdFixed in State) and Ctl3D then begin
DrawEdge(Canvas.Handle, Rect, BDR_RAISEDINNER, BF_RIGHT+BF_BOTTOM);
DrawEdge(Canvas.Handle, Rect, BDR_RAISEDINNER, BF_LEFT+BF_TOP);
end;
end;
end;

Como este código se encarga de pintar todas las celdas, la propiedad DefaultDrawing se debería poner en False, pues no tiene sentido que primero el componente dibuje las celdas y luego en el evento OnDrawCell las vuelva a dibujar encima.

El texto de las celdas se puede centrar o también alinear a la derecha modificando los parámetros en la llamada a TextRect:

Centrado:
CellText := Cells[ACol,ARow];
Canvas.TextRect(Rect, Rect.Left + (Rect.Right - Rect.Left -
Canvas.TextWidth(CellText) + 1) div 2, Rect.Top + 2, CellText);

Alineado a la derecha:
CellText := Cells[ACol,ARow];
Canvas.TextRect(Rect, Rect.Right - Canvas.TextWidth(CellText) - 2,
Rect.Top + 2, CellText);

Copyright (c) 2003 Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

DefaultDrawing

Publicado por Francisco (140 intervenciones) el 20/05/2003 21:49:01
La otra vez yo intente hacer lo mismo, o sea pintar con distinto color en una StringGrid pero no encontré la propiedad DefaultDrawing, cosa que en una TDBGrid si existe.
No sé si esa es una caracteristica nueva de Delphi 7 porque en el 6 no está..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pintar fila de un StringGrid

Publicado por Victor (102 intervenciones) el 19/05/2003 21:46:48
En la sección de Cursos de este sitio hay un tutorial de creación de componentes. En este tutorial te explica detalladamente como crear un componente, y uno de esos se llama Multigrid, este componente te permite manejar los colores por cada fila.
Creo que te va a servir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pintar fila de un StringGrid

Publicado por Martin (30 intervenciones) el 19/05/2003 22:21:36
Ok amigos, muchas gracias a los dos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar