FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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; |
#3
|
|||
|
|||
He olividado decir que si lo que estas es creando un componente, puedes sobreescribir el procedimiento DrawCell, lo cual tendría el mismo efecto.
|
#4
|
|||
|
|||
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'; Cuando intento recuperar el texto en la celda con la sentencia: Código:
ShowMessage(StringGrid1.Cells[0, 0]); 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. |
#5
|
|||
|
|||
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; |
#6
|
|||
|
|||
OK, muchas gracias.
Perdon que sea reiterativo pero realmente necesito recuperar el texto tambien, sabes de que manera puedo hacerlo?. Saludos. |
#7
|
|||
|
|||
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]); |
#8
|
|||
|
|||
Muchisimas gracias Elpinjum,
Anda muy bien el codigo, es exactamente lo que necesito. Saludos. |
|
|
|