Ir al contenido


Foto

Intercalar color filas DBgrid pero pierdo alineación.


  • Por favor identifícate para responder
2 respuestas en este tema

#1 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 292 mensajes

Escrito 27 marzo 2021 - 04:03

Buenos días,

 

Como miembro desde hace años, después de un parón obligado, he vuelto a retocar pequeños proyecto aparcados que ahora ya puedo retomar. Espero y deseo que los miembros que dejé en su día por este foro, sigan por aquí y todo les vaya bien en estos tiempos. Todo lo que aprendí de ellos, nunca lo olvidaré, y espero seguir haciendolo a partir de ahora como lo hacía antes.

Tengo la vers. C.T 5.6 instalada, tal cual tuve que dejar. La he vuelto a instalar y mi problema radica con un simple DBGrid.

 

DBGrid con 4 columnas, en dos ellas tengo visualizado dos pequeño iconos con su código asociado, dentro del mismo procedure DBGrid1DrawColumnCell. Ahora he intento alternar el color de las filas, porque visualmente para mi es más facil ver la grilla, mediante este código.


delphi
  1. row := DBgrid1.DataSource.DataSet.RecNo; // leo registros totales.
  2. if odd(row) then
  3. begin
  4. UnColor:=clskyBlue;
  5. end
  6. else begin UnColor:=clWhite; end;
  7.  
  8. with (Sender As TDBGrid).Canvas do
  9. begin
  10. brush.Color:=UnColor;
  11. font.color:=ClBlack;
  12. FillRect(Rect);
  13. TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
  14. //DBgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State); -> Lo he quitado porque con esta opción se escribe varias veces la misma fila alineada y sin alinear
  15. end;

Así me marca el color de las filas, pero pierde la alineación, y como he comentado, el texto de las dos columnas con iconos, se solapan y el texto se superpone en los iconos (ya que los iconos están a la izquierda y el texto se superpone tambien a la izquierda) cuando antes de colorear las filas, estaba a la derecha. He intentado cambiar en las propiedad del DBgrid alignment = taRightJustifity, pero no responde ninguna columna siquiera.

He probado varios códigos, pero este es el único que me colorea.

 

Muchas gracias y un saludo.


  • 0

#2 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 27 marzo 2021 - 03:22


delphi
  1. procedure TFFichaje.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  2. DataCol: Integer; Column: TColumn; State: TGridDrawState);
  3. begin
  4. if ((Column.Field.Dataset.FieldbyName('regpuntual').AsBoolean)=True) then
  5. dbgrid1.canvas.Font.color:=RGBToColor(20,94,37)
  6. else
  7. dbgrid1.canvas.Font.color:=RGBToColor(192,39,8);
  8. dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
  9. end;
  10.  
  11. procedure TFFichaje.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer;
  12. Column: TColumn; AState: TGridDrawState);
  13. begin
  14. if ([gdSelected, gdFocused] * AState <> []) then
  15. begin
  16. DBGrid1.Canvas.Brush.Color := RGBToColor(162,228,232);
  17. end;
  18. end;

Hola doooper, hace mucho que tengo este código funcionando, te aclaro que no tengo iconos en la grilla, Por ahí te sirve, lo hice hará 3 años así que no recuerdo muy bien como lo hice, pero funcionar, funciona.

 

Saludos.
 


  • 0

#3 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 292 mensajes

Escrito 27 marzo 2021 - 04:06


delphi
  1. procedure TFFichaje.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  2. DataCol: Integer; Column: TColumn; State: TGridDrawState);
  3. begin
  4. if ((Column.Field.Dataset.FieldbyName('regpuntual').AsBoolean)=True) then
  5. dbgrid1.canvas.Font.color:=RGBToColor(20,94,37)
  6. else
  7. dbgrid1.canvas.Font.color:=RGBToColor(192,39,8);
  8. dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
  9. end;
  10.  
  11. procedure TFFichaje.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer;
  12. Column: TColumn; AState: TGridDrawState);
  13. begin
  14. if ([gdSelected, gdFocused] * AState <> []) then
  15. begin
  16. DBGrid1.Canvas.Brush.Color := RGBToColor(162,228,232);
  17. end;
  18. end;

Hola doooper, hace mucho que tengo este código funcionando, te aclaro que no tengo iconos en la grilla, Por ahí te sirve, lo hice hará 3 años así que no recuerdo muy bien como lo hice, pero funcionar, funciona.

 

Saludos.
 

 

Gracias  Gaston, probaré. Se me olvidó indicar que uso ZEOS. Ese código que he puesto me funciona, pero como digo el texto donde están los iconos, se mueven de posición y se va y se superpone con el icono, pero con todo el texto de la fila. Veo que o bien alineación con iconos o bien color filas como opciones. Veré tu codigo pero creo que viene por ahí los tiros.

Lo que si he podido hacer es mover el icono hacia derecha. Pero claro el DBGrid está bloqueado para alinear el texto a gusto, automaticamente lo deja hacia la izquierda. No me convence.

 

Probado y no me vale, no lo hace correctamente si tengo iconos en la grilla. Si elimina los iconos, lo hace. El problema viene con el código asociado a lo iconos, no "compatibliza" con insertar tanto el mi codigo inicial como este. Ademas como los iconos tiene la sentencia bgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State), en mi codigo hay que eliminarlo sin sale marcada el contenido de la fila dos veces.


  • 0