Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Coleres en las Grilla (https://www.clubdelphi.com/foros/showthread.php?t=36757)

josem 23-10-2006 15:35:45

Coleres en las Grilla
 
Hola Integrantes.

La cosa es la siguiente:Tengo una grilla en la cual presento los datos de una tabla. En esta grilla capturo el evento "OnDrawColumnCell" y presento fila por medio de otro color. Me explico:La primera fila color por defecto (Blanco), la segunda de un color celeste, la tercera de color blanco, la cuarta color celeste..., y asi sucesivamente. El punto es que muevo el cursor y este queda sobre la fila por defecto, esta fila se presenta de color azul con letras blancas ( Lo cual esta correcto ), pero cuando se posisiona sobre una de las celdas coloreadas. El cursor se presenta del color de fondo modificado (celeste en este caso) y con letras blancas. Con lo cual obiamente no se ve el contenido de la fila.

La pregunta es: Como puedo interceptar el cursor, para cambiar el color de fondo cuando el cursor este sobre las filas celestes?. Intente usar el evento "AfterScroll" de la tabla; pero tengo la grilla en un formulario y la tabla en otro formulario (un DataModule) por lo cual no pude hacerlo.

Alguna sugerencia..?

Gracias
Saludos
Jose Miguel B.

Neftali [Germán.Estévez] 23-10-2006 15:46:53

CReo que se puede hacer en el mismo procedimiento que estás utilizando teniendo en cuenta el parámetro de State.

josem 23-10-2006 17:54:51

Hola Neftali.
Podrias ser mas explicito.. Gracias.

Saludos
Jose Miguel B.

Neftali [Germán.Estévez] 23-10-2006 19:00:10

Si no me equivoco, está teniendo problemas con la barra que marca el registro seleccionado en ese momento.

¿Puedes poner el código? Con eso estaríamos seguros.

josem 24-10-2006 19:40:20

Hola, me habia ausentado de la oficina y no habia tenido oportunidad de leer tu respuesta.

Agradesco tu interes. Aqui va el codigo. Y efectivamente tengo problemas con la barra que marca el registro seleccionado.

Gracias

Saludos
Jose Miguel B.



Código Delphi [-]
with Sender as TDBGrid do
begin
if ( Dt1.TDatReserva.RecNo div 2 ) = ( Dt1.TDatReserva.RecNo / 2 ) then
Canvas.Brush.Color := $00FBEEE3;
DefaultDrawColumnCell(Rect, DataCol, Column, State);

AzidRain 24-10-2006 21:35:08

Espero te sirva este snippet de codigo que tenia por ahi, hace precisamente lo que quieres, aunque en este caso se sobreescribe el metodo GetCellParams para dibujar las filas con los colores que se requieran segun corresponda.

Código Delphi [-]
//Ojo: La Grilla es una TRxDBGrid de las Rx

procedure TFMasterList.GridCobranzaGetCellParams(Sender: TObject;
  Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);

begin
if Odd( SQLData.ZMaster.RecNo )  then // Si es fila par
    begin
      If Not Highlight Then          //Y NO ESTA SELECCIONADA OJO!
      Begin
         BackGround:=clCream;   //ponle fondo crema
         AFont.Color:=clBlack;   // y letras negras
      end
      else
      Begin
          BackGround:=clCream;   //Aqui pondrias los colores que quieres
         AFont.Color:=clBlack;   // para cuando la fila este seleccionada
                                        // o bien no poner nada y quitar el else
                                        // para usar los colores por default.
      end;
    end;
  {else  Aqui puedes poner los colores que aplicarian para las filas impares
    Begin
    end;
   }

end;

Como ves es sencillo y la ventaja es que solo necesitas cambiar lo indispensable pues el resto del dibujo de la fila lo hace con los colores por defecto. Puedes jugar con condiciones para pintar una fila segun los datos del registro actual. Recuerda que el evento se ejecuta por cada registro visible en la grilla.

Espero te sirva aunque yo ya no lo uso pues ahora uso las DevExpress que estan mas fáciles de personalizar.

Saludos

Ecijano86 06-06-2007 20:05:15

Cita:

Empezado por AzidRain
Espero te sirva este snippet de codigo que tenia por ahi, hace precisamente lo que quieres, aunque en este caso se sobreescribe el metodo GetCellParams para dibujar las filas con los colores que se requieran segun corresponda.


Código Delphi [-]
//Ojo: La Grilla es una TRxDBGrid de las Rx
 
procedure TFMasterList.GridCobranzaGetCellParams(Sender: TObject;
  Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);
 
begin
if Odd( SQLData.ZMaster.RecNo )  then // Si es fila par
    begin
      If Not Highlight Then          //Y NO ESTA SELECCIONADA OJO!
      Begin
         BackGround:=clCream;   //ponle fondo crema
         AFont.Color:=clBlack;   // y letras negras
      end
      else
      Begin
          BackGround:=clCream;   //Aqui pondrias los colores que quieres
         AFont.Color:=clBlack;   // para cuando la fila este seleccionada
                                        // o bien no poner nada y quitar el else
                                        // para usar los colores por default.
      end;
    end;
  {else  Aqui puedes poner los colores que aplicarian para las filas impares
    Begin
    end;
   }
 
end;




Como ves es sencillo y la ventaja es que solo necesitas cambiar lo indispensable pues el resto del dibujo de la fila lo hace con los colores por defecto. Puedes jugar con condiciones para pintar una fila segun los datos del registro actual. Recuerda que el evento se ejecuta por cada registro visible en la grilla.

Espero te sirva aunque yo ya no lo uso pues ahora uso las DevExpress que estan mas fáciles de personalizar.

Saludos

Buenas Tardes AzidRain:

No sé si leerás esto o no... pero tío, MUCHAS GRACIAS POR ESTE CÓDIGO porque tras 7 horas buscando buscando.... topamos con este código y nos lo solucionó, que nos ha abierto las puertas del cielo JAJAJAJAJAJAAJAJA

Guardaré la pistola para otro día.... xD

Muchas gracias de nuevo


La franja horaria es GMT +2. Ahora son las 03:04:54.

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