Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2008
Avatar de ManuelPerez
ManuelPerez ManuelPerez is offline
Miembro
 
Registrado: sep 2007
Ubicación: Rio III - Córdoba - Argentina
Posts: 71
Poder: 17
ManuelPerez Va por buen camino
Pintar filas TDBGrid

Hola necesito pintar las filas en una TDBGrid, es decir pintar por ejemplo con celeste las filas impares.
gracias
Responder Con Cita
  #2  
Antiguo 07-08-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, ¿te refieres a alternar los colores en las filas de un DBGrid?
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 07-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola ManuelPerez,
Para conseguir lo que quieres, debes interceptar el evento OnDrawDataCell y/o el OnDrawColumnCell. Estos eventos se disparan cada vez que se va a "pintar" una celda y columna. Tengo entendido que en otras ocasiones se habló del tema. Si buscas en el buscador con la palabras clave pintar dbgrid y DrawColumnCell, DrawDataCell vas a encontrar mayor información.

Yo mucho no puedo decirte puesto que no trabajado con estos eventos pero recuerdo haber visto ejemplos aqui en los foros.

La otra opción es emplear un dbgrid de terceros que añada dicha funcionalidad. Puedes encontrar componentes pagos como gratuitos. En torry.net es muy probable que encuentres algunos.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 07-08-2008
Avatar de ManuelPerez
ManuelPerez ManuelPerez is offline
Miembro
 
Registrado: sep 2007
Ubicación: Rio III - Córdoba - Argentina
Posts: 71
Poder: 17
ManuelPerez Va por buen camino
Si..

Si lo que quiero es alternar los colores.

celeste
blanco
celeste
blanco
celeste
...

gracias
Responder Con Cita
  #5  
Antiguo 07-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola,
seria algo asi

Código Delphi [-]
procedure T_main.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
        x : integer;
begin
        if (gdSelected in state) then
        (sender as TDBGrid).canvas.Brush.Color := $00C08000
        else
        if (sender as TDBGrid).datasource.dataset.RecNo mod 2 = 0 then
        (sender as TDBGrid).canvas.Brush.Color := clAqua - $000b0b0b
        else
        (sender as TDBGrid).canvas.Brush.Color := clAqua - $00010101;

        (sender as TDBGrid).canvas.FillRect(Rect);

        if Column.Field <> nil then
        begin
        case  Column.Alignment of
         taCenter : x := (Rect.Right - Rect.Left) div 2 - (sender as TDBGrid).canvas.TextWidth(Column.Field.asstring) div 2;
         taLeftJustify : x := 0;
         taRightJustify : x := Rect.Right - (sender as TDBGrid).canvas.TextWidth(Column.Field.asstring);
         end;

        (sender as TDBGrid).DefaultDrawing := true;
        (sender as TDBGrid).canvas.TextOut(Rect.Left + x,Rect.top,Column.Field.asstring);
        end;
end;

EDITO : modificacion para el justify y el selected, y el activerecord por el RecNo

Última edición por coso fecha: 11-08-2008 a las 17:14:56.
Responder Con Cita
  #6  
Antiguo 07-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola


Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 07-08-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Wink

como menciono delphiu anteriormente, puedes utilizar el componente NiceGrid, el cual es muy util y puedes realizar varios opciones adicionales..

vista esta pagina y lo encontrarás...

Salu2
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 08-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
También puedes echarle un vistazo a este componente (TCustomizeGrid) que hay en mi página Web.
Te permite hacer lo que necesitas utilizando el DBGrid que ya tienes y sin escribir una línea de código.

Es un componentes aparte del DBGrid; Le asignas el Grid con el que trabaja, y el estilo de filas alternativas que quieres: asOxid, asDarkSky, asDesert,...



En la imagen tienes algunos ejemplos; Además tienes alguna otra propiedad para mejorar el pintado del DBGrid, junto con eventos extra para facilitar el pintado de elementos diferentes en las filas.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 08-08-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
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 (SANTYCG@terra.es)

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
  #10  
Antiguo 11-08-2008
franciscoca franciscoca is offline
Miembro
 
Registrado: ago 2008
Ubicación: La Plata
Posts: 12
Poder: 0
franciscoca Va por buen camino
pintar las filas pares de un color

Fijate con esto un dbgrid y un query
no me lo acuerdo bien como lo hice pero era mas o menos asi...
Ej

If((Query1.recNo mod 2)=0)then DBgrid1.Canvas.Brush.color:= clSkyBlue;
{Fijate en las propiedades del query que no se si iba de una recNo o iba antes Field o otra cosa}

dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
Responder Con Cita
  #11  
Antiguo 11-08-2008
franciscoca franciscoca is offline
Miembro
 
Registrado: ago 2008
Ubicación: La Plata
Posts: 12
Poder: 0
franciscoca Va por buen camino
Aca lo encontre....

procedure TFVisor.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i:integer;
begin
if ((Column.Field.Dataset.FieldbyName('Prestado').AsBoolean)=True) then dbgrid1.canvas.Font.color := clRed;
if ((DataModule1.QVisor.RecNo mod 2)=0)then
begin
if (gdselected in State)then
begin
dbgrid1.canvas.brush.color := clActiveCaption;
end
else dbgrid1.canvas.brush.color := clSilver;
end;
dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
Responder Con Cita
  #12  
Antiguo 12-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Francisco, utiliza TAG's cuando añadas código a los mensajes.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


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 11:46:59
problemas al pintar filas con cxGrid v5 DANY OOP 1 29-11-2006 04:02:14
Pintar filas de un Listview Coco_jac Varios 4 14-07-2006 16:46:18
Pintar filas DbGrid lunatiko Varios 5 05-07-2005 16:11:51
pintar filas de un dbgrid febito Varios 1 01-04-2004 17:50:20


La franja horaria es GMT +2. Ahora son las 15:29:16.


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
Copyright 1996-2007 Club Delphi