Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 08-08-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 438
Poder: 21
JoAnCa Va por buen camino
Cool cambiar el color de una fila del dbgrid

Puedes consultar el truco 411 de Trucomania (cambiar el color de una fila) y tambien el 61, para las columnas
No obstante, te lo copio para adelantarte algo


En este otro, cambiaremos el color de una fila entera, es decir, de un registro entero (un registro o los que cumplan una determinada condición).

El asunto es conseguir que la comparacion de si se trata de un registro a mostrar de otro color, no se realice una vez por cada campo de cada
registro, sino una vez por registro, ganando así en velocidad.
Para ello, calcularemos el color con el que pintaremos el registro en una sóla de las columnas del DBGrid, usando este color calculado en el resto
de las columnas.
¿Para que sirve esto?, por ejemplo, imaginate una lista de clientes mostrada en un DBGrid... podriamos marcar en rojo aquellos clientes que nos
deban dinero...

Vamos con un ejemplo:

Usaremos la tabla Animals.DBF de las demos de Delphi:

-Pon una Tabla y asociala a la tabla Animals.DBF de las demos de Delphi
-Pon un Datasouce asociado a la tabla
-Pon un DBGrid (DBGrid1) asociado al DataSource
-Declara una variavle TColor en el private de la form:


Código Delphi [-]
  private
    { Private declarations }
    UnColor:TColor;


-Mete este código en el evento OnDrawColumnCell de DBGrid1:


Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin 
  {Si es la primera columna, calculamos el color}
  {UnColor debe estar declarada global a la form}
 
  {If it is the first column, we calculate the color}
  {UnColor should be declared as global to the form}
  if DataCol=0 then 
    if Table1Size.AsInteger>10
      then UnColor:=clRed
      else UnColor:=clBlack;
 
  with (Sender As TDBGrid).Canvas do 
  begin 
    Font.Color:=UnColor;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
  end; 
end;

Una mejora para que funciona aunque hagan scroll de las columnas:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin 
  {Si es la primera columna, calculamos el color}
  {UnColor debe estar declarada global a la form}
 
  {If it is the first column, we calculate the color}
  {UnColor should be declared as global to the form}
  if DataCol=TStringGrid(Sender).LeftCol-1 then 
    if Table1Size.AsInteger>10
      then UnColor:=clRed
      else UnColor:=clBlack;
 
  with (Sender As TDBGrid).Canvas do 
  begin 
    Font.Color:=UnColor;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
  end; 
end;


Enviado por: Santy Concepción ([email protected])

Te envío una mejora para el truco [411] de TrucoManía Mostrar de otro color una FILA de un DBGrid
Con los trucos anteriores, el formato y la alineación del texto de las celdas se perdía...
Pero con este método lo conservamos y el resultado es increíble.


Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const 
  clPaleGreen = TColor($CCFFCC);
  clPaleRed =   TColor($CCCCFF);
begin 
    if Column.Field.Dataset.FieldbyName('CANTIDAD').AsInteger < 5
      then 
       if (gdFocused in State)
        then dbgrid1.canvas.brush.color := clBlack
        else dbgrid1.canvas.brush.color := clPaleGreen;
 
    //Esta línea es nueva
 
    dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
end;

Así conservamos el formato y alineación del texto que había antes.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pintar filas del TstringGrid Gagiel Varios 2 16-03-2007 10:46:59
problemas al pintar filas con cxGrid v5 DANY OOP 1 29-11-2006 03:02:14
Pintar filas de un Listview Coco_jac Varios 4 14-07-2006 15:46:18
Pintar filas DbGrid lunatiko Varios 5 05-07-2005 15:11:51
pintar filas de un dbgrid febito Varios 1 01-04-2004 16:50:20


La franja horaria es GMT +2. Ahora son las 08:47:31.


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