Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBGrid (Color de barra de selección) (https://www.clubdelphi.com/foros/showthread.php?t=56308)

Caro 14-05-2008 03:50:58

DBGrid (Color de barra de selección)
 
Hola a todos

En un DbGrid según a mi campo estado que tengo muestro algunos registros de un color u otro, lo que quiero es poder cambiar el color de la barra de selección que aparece en azul, osea que cuando este con un color u otro me muestre la barra de selección de un color un poco mas fuerte al color donde se encuentra en ese momento.

Saluditos y muchísimas gracias por adelantado.

roman 14-05-2008 03:59:56

Hola Caro,

Puedes hacerlo cambiando DBGrid.Canvas.Brush.Color:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if tu_condición and (gdSelected in State) then
    DBGrid1.Canvas.Brush.Color := clRed;

  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

// Saludos

Caro 14-05-2008 04:13:48

En este momento estaba viendo en la ayuda sobre el gdSelected, muchísimas gracias Roman, me ha funcionado como quería.

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if gdSelected in State then
   begin
     if DBGrid1.Canvas.Brush.Color = $00A4FFFF then
      begin
       DBGrid1.Canvas.Brush.Color := clYellow;
       DBGrid1.Canvas.Font.Style := [fsBold];
      end
     else
      begin
       DBGrid1.Canvas.Brush.Color := $00E7C4B6;
       DBGrid1.Canvas.Font.Color := clBlack;
       DBGrid1.Canvas.Font.Style := [fsBold];
      end;
   end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Saluditos

roman 14-05-2008 06:06:48

No sé si ya te percataste, pero esta forma de pintar la barra no funciona bien si el DBGrid tiene activada la opción dgMultiSelect. Luego de darle algunas vueltas al código de la VCL, veo que la opción más sencilla es usar el método HighlightCell del DBGrid, ya que éste toma en consideración las filas que estén seleccionadas. Lo malo es que este método está protegido, aunque puede usarse el viejo truco de la desprotección:

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

procedure TForm1.DBGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if TDBGrid(DBGrid1).HighlightCell(DataCol, TDBGrid(DBGrid1).Row, '', State) then
    DBGrid1.Canvas.Brush.Color := clRed;

  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

En fin, creo que esto sólo sería necesario si está activada la opción mencionada.

// Saludos

Caro 14-05-2008 14:13:28

La verdad no me di cuenta que no funcionaba con la opción dgMultiSelect, ya que no la tengo activada, pero tomare en cuenta lo que dijiste cuando lo necesite de esa forma ;). Muchas gracias de nuevo amiguito Roman.

Saluditos

Cañones 17-05-2008 14:27:53

Hola. Una consulta.
Como hiciste para que cambie el color del registro según el campo estado, Yo quisiera poner en rojo los que tienen una fecha de baja?
Estoy interesado en eso, porque lo busque y no pude saber como hacerlo.
Desde Ya Gracias.

Caro 18-05-2008 07:55:24

Hola Cañones, tienes que hacerlo en el mismo evento OnDrawColumnCell, suponiendo que los que no tienen fecha de baja, tienen un valor Null.

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   if Not (Query1.FieldByName('FECHA_BAJA').IsNull) then
    begin
     // Cambiamos el color
     DBGrid1.Canvas.Brush.Color := $00A4FFFF;
     DBGrid1.Canvas.Font.Color := clRed;
 
     DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;
end;

Saluditos

Cañones 24-05-2008 14:52:49

Gracias Caro.
Sabes que encontre el hilo de suerte igual que la primera vez que entre y tu respuesta no me llego al correo.
Bueno, ahora veo como hacerlo.
Muchas gracias, esto me sirve de mucho.
Saludos.
Cañones.


La franja horaria es GMT +2. Ahora son las 03:05:45.

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