Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Pintar una fila entera de un DBGrid y determinar columnas (https://www.clubdelphi.com/foros/showthread.php?t=65670)

cslbcn 05-01-2010 12:01:21

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 :confused::confused:

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

Caro 05-01-2010 16:25:26

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

cslbcn 07-01-2010 09:46:48

Gracias por responder.
El compilador dice que no reconoce CellRect ni Row

aRect := TDBGrid(Sender).CellRect(DataCol+1,TDBGrid(Sender).Row);

Neftali [Germán.Estévez] 07-01-2010 15:43:07

Cita:

Empezado por cslbcn (Mensaje 350040)
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.

Caro 08-01-2010 16:14:17

Cita:

Empezado por cslbcn (Mensaje 350149)
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

cslbcn 12-01-2010 16:35:18

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);

Cañones 15-01-2010 20:20:59

Cita:

Empezado por cslbcn (Mensaje 350040)
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 :confused::confused:

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.


La franja horaria es GMT +2. Ahora son las 19:00:46.

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