Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-01-2010
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Exclamation Pintar una fila entera de un DBGrid y determinar columnas

Hola. Explico mejor el asunto y problema que tengo:

Uso Delphi 7 y tengo un DBgrid al que, seleccionando una fila, se pinta la fila entera. Esto lo hago con DBGrid1 > Options > dgRowSelect > true

El problema que ocurre es que si pincho en la celda 3, detecta que he pulsado la celda 0, al estar toda la fila seleccionada no diferencia entre columnas

Es decir, este código no se ejecuta:

Código Delphi [-]
if Column.FieldName = 'Campo3' then
begin
   //TO DO
end;

Hay alguna manera de solucionar esto?

Gracias
Responder Con Cita
  #2  
Antiguo 05-01-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola cslbcn, lo que se me ocurre es que pintes tu la fila, sin el RowSelect (ponerlo a False), para ello podrías desprotejer primero el DBGrid, de esta forma:

Código Delphi [-]
type
  TDBGrid = class(DBGrids.TDBGrid);

En tu evento OnColumnCell haces lo siguiente:

Código Delphi [-]
procedure TForm1.dbgrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
 aRect: TRect;
begin
  TDBGrid(Sender).Canvas.Font.Color := clWhite;
  TDBGrid(Sender).Canvas.Brush.Color := clBlue;
  aRect := TDBGrid(Sender).CellRect(DataCol+1,TDBGrid(Sender).Row);
  TDBGrid(Sender).DefaultDrawColumnCell(aRect,DataCol,Column,State);


Pruebalo, puede que tengas que hacer algunos controles mas.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 07-01-2010
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
Gracias por responder.
El compilador dice que no reconoce CellRect ni Row

aRect := TDBGrid(Sender).CellRect(DataCol+1,TDBGrid(Sender).Row);
Responder Con Cita
  #4  
Antiguo 07-01-2010
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.282
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
Cita:
Empezado por cslbcn Ver Mensaje
El problema que ocurre es que si pincho en la celda 3, detecta que he pulsado la celda 0, al estar toda la fila seleccionada no diferencia entre columnas
¿Qué evento estás utilizando para detectar que pulsan en una celda?
Tal vez deberías utilizar alguno de los que te devuelven X e Y y a partir de ahí (coordenadas) detectar la columna en la que se ha pulsado.
__________________
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
  #5  
Antiguo 08-01-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por cslbcn Ver Mensaje
Gracias por responder.
El compilador dice que no reconoce CellRect ni Row
Hola de nuevo, para que reconozca directamente como lo puse, es importante que desprotejas el DBGrid:

Código Delphi [-]
type
  TDBGrid = class(DBGrids.TDBGrid);

Sino, por lo menos has un Cast a TStringGrid:

Código Delphi [-]
  TStringGrid(TDBGrid(Sender)).Canvas.Font.Color := clWhite;
  TStringGrid(TDBGrid(Sender)).Canvas.Brush.Color := clBlue;
  aRect := TStringGrid(TDBGrid(Sender)).CellRect(DataCol+1,TStringGrid(TDBGrid(Sender)).Row);
  TStringGrid(TDBGrid(Sender)).DefaultDrawColumnCell(aRect,DataCol,Column,State);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 12-01-2010
cslbcn cslbcn is offline
Miembro
 
Registrado: jul 2008
Posts: 60
Poder: 16
cslbcn Va por buen camino
No funciona bien del todo. Cuando se seleccionan filas de abajo hacia arriba los datos se suben, además que el color azul de la selección se mantiene en cada fila que pincho.
tengo este código hecho... por si sirve de algo

Código Delphi [-]
 if ((DModule1.ADOQuery2.RecNo mod 2) = 0) then
     begin
       if GdSelected in State then
       begin
         DBGPersonasEmp.Canvas.Brush.Color := clActiveCaption;     //         Draw(Rect.Left,Rect.Top, CheckRev.Picture.BitMap);
       end
       else
       begin
         DBGPersonasEmp.Canvas.Brush.Color := clWhite;     //         Draw(Rect.Left,Rect.Top, CheckRev.Picture.BitMap);
       end;
     end
     else
     begin
       if GdSelected in State then
       begin
         DBGPersonasEmp.Canvas.Brush.Color := clActiveCaption;     //         Draw(Rect.Left,Rect.Top, CheckRev.Picture.BitMap);
       end
       else
       begin
         DBGPersonasEmp.Canvas.Brush.Color := clBtnFace;     //         Draw(Rect.Left,Rect.Top, CheckRev.Picture.BitMap);
       end;
     end;

     DBGPersonasEmp.DefaultDrawDataCell(Rect, Column.Field, State);

Última edición por cslbcn fecha: 12-01-2010 a las 17:09:05.
Responder Con Cita
  #7  
Antiguo 15-01-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Cita:
Empezado por cslbcn Ver Mensaje
El problema que ocurre es que si pincho en la celda 3, detecta que he pulsado la celda 0, al estar toda la fila seleccionada no diferencia entre columnas
Hola, hace mucho me tope con lo mismo, exactamente lo mismo. Por algún motivo no puede reconocer las columnas, en cual estás, de cual salis y cosas así.

La solucion? Trabaje sobre el dataset por medio del datasourse.

Saludos.
Responder Con Cita
Respuesta



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 un dbGRid sebas78 Gráficos 5 22-07-2006 16:06:36
Como pintar la fila de un DBGrid Gustavo Gowdak OOP 2 04-05-2006 21:34:04
Pintar toda una fila de un DBGrid Luciano M. Varios 4 02-05-2006 22:30:24
Pintar Fila del DBGrid Palmiro Conexión con bases de datos 2 05-04-2006 23:25:51
Pintar Fila por medio en ub DBGrid josem OOP 3 01-01-2005 20:54:52


La franja horaria es GMT +2. Ahora son las 18:37:20.


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