Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Alineamiento y Estilo en celda de StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=1665)

andre 23-06-2003 15:15:45

Alineamiento y Estilo en celda de StringGrid
 
Hola amigos,

Como puedo establecer el alineamiento y el estilo de fuente y color de fondo de una celda especifica o un grupo de celdas en un StringGrid, por ejemplo que la primera columna este alineada a la derecha o que una fila tenga un color de fondo distinto y la letra en negrita.

Muchas gracias.

elpinjum 23-06-2003 15:36:06

Puedes usar el evnto de StringGrid DrawCell, el cual se ejecuta antes de que se dibuje cada celda, y en el cual puedes establecer las propiedades del canvas como quieras para que se el texto salga como quieras y el fondo del canvas igual.

El siguiente codigo si lo asocias a un StringGrid en el evento DrawCell, te escribra el texto Hola, en negrita en las columnas impares y normal en las pares.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
If (ACol div 2)=(ACol / 2) then
TStringGrid(Sender).Canvas.Font.Style:=[]
else
TStringGrid(Sender).Canvas.Font.Style:=[fsBold];
TStringGrid(Sender).Canvas.TextOut(Rect.Left,Rect.Top,'Hola');
end;

elpinjum 23-06-2003 15:39:07

He olividado decir que si lo que estas es creando un componente, puedes sobreescribir el procedimiento DrawCell, lo cual tendría el mismo efecto.

andre 23-06-2003 16:35:18

Muchas gracias por la solucion amigo aunque hay un problemita, cuando cambio el texto de la celda con la sentencia:
Código:

StringGrid1.Cells[0, 0] := 'Hola otra vez';
la palabra se escribe junto con la que se definio en el evento ondrawcell como me dijiste, se sobreescriben las dos.

Cuando intento recuperar el texto en la celda con la sentencia:
Código:

ShowMessage(StringGrid1.Cells[0, 0]);
me devuelve una cadena vacia.

Hay alguna solucion para que se cambie solamente los valores de alineamiento y estilo pero que el texto se ingrese en otro lado que no sea en el evento ondrawcell?

De nuevo muchas gracias.

elpinjum 24-06-2003 09:11:58

No se si te servirá pero lo que puedes hacer es en el el evento onDrawCell, borrar todo el contenido de la celda con un rectangulo blanco, y despues pintar tu mismo el texto de la celda como te muestro en el siguiente codigo.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Rectangle(Rect);
If (ACol div 2)=(ACol / 2) then
TStringGrid(Sender).Canvas.Font.Style:=[]
else
TStringGrid(Sender).Canvas.Font.Style:=[fsBold];
TStringGrid(Sender).Canvas.TextOut(Rect.Left,Rect.Top, StringGrid1.Cells[ACol,ARow]);
end;

andre 25-06-2003 13:12:58

OK, muchas gracias.

Perdon que sea reiterativo pero realmente necesito recuperar el texto tambien, sabes de que manera puedo hacerlo?.

Saludos.

elpinjum 25-06-2003 15:22:09

Con el último codigo que te he pasado tendrías que poder recuperarlo haciendo uso de la propiedad Cells, ya que lo que hace el procedimiento es primero borrar cada celda, y luego poner el texto de la propiedad Cells de la celda.

Es decir los valores que introduzca en la propiedad Cells[x,y] son los que se te van a pinter en la celda.

Prueba a recuperar el texto con la propiedad cells de cada columna, deberia funcionarte.

ShowMessage(StringGrid1.Cells[0, 0]);

andre 25-06-2003 16:16:12

Muchisimas gracias Elpinjum,

Anda muy bien el codigo, es exactamente lo que necesito.

Saludos.


La franja horaria es GMT +2. Ahora son las 21:24:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi