Ir al contenido


Foto

Como pintar el fondo de un color en un registro seleccionado en el dbgrid ??


  • Por favor identifícate para responder
7 respuestas en este tema

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 14 septiembre 2010 - 03:06

Buen dia compañeros, es una pregunta tal vez tonta, pero ando viendo como pintar el fondo del registo en que estoy posicionado dentro de dbGrid, sin alterar el color de los otros registros, es decir quedarian en color blanco, esto es con el objetivo de resaltar el registro seleccionado, el siguiente código me pinta todas las líneas del dbgrid conforme me voy desplazando entre lo registros


delphi
  1. procedure TfrybDocCaja.dbgridDrawColumnCell(Sender: TObject;
  2.   const Rect: TRect; DataCol: Integer; Column: TColumn;
  3.   State: TGridDrawState);
  4. begin
  5.   dbgrid.Canvas.Brush.Color := clAqua;
  6.   TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
  7. end;




  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 14 septiembre 2010 - 03:27

Buenas,

No tengo el Delphi a mano ahora, pero los DbGrids tienen una propiedad de opciones en la que puedes decirle que te marque todo el registro activo. No se si eso te valdrá

Nos leemos

  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 14 septiembre 2010 - 03:40

Saludos.

Para que funcione el código debes de marcar a True la opción dgRowSelect dentro de la propiedad Options.



delphi
  1. procedure TForm1.MyGridDrawColumnCell(Sender: TObject;
  2. const Rect: TRect; DataCol: Integer; Column: TColumn;
  3. State: TGridDrawState);
  4. begin
  5.   with MyGrid do
  6.   begin
  7.     if (gdSelected in state) then
  8.     begin
  9.       Canvas.Brush.Color := clYellow;
  10.       Canvas.font.Color := clBlack;
  11.     end;
  12.     DefaultDrawColumnCell(Rect, Datacol, Column, State);
  13.   end;
  14. end;



Espero te sirva!
  • 0

#4 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 14 septiembre 2010 - 07:15

Si funciona, pero el problema es que ocupo ESCRIBIR en ciertas columnas y con la propiedad dgRowSelect en True no me deja editar ningun campo en el dbGrid, disculpa por no haberlo mencionado anteriormente.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 15 septiembre 2010 - 06:25

Saludos.

El "truco" no funciona si necesitas escribir, entonces te recomiendo probar a alterar la propiedad Font simplemente; obviamente quitando la propiedad dgRowSelect.
  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 15 septiembre 2010 - 09:26

Buenas,

Lo que se me ocurre, en plan "chapucilla", es controlar el evento OnColEnter y, según la columna que sea, poner las opciones de una manera o de otra (formato editar cuando sea una columna editable y formato "fijo" cuando no).

Nos leemos

  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 15 septiembre 2010 - 11:35

Quizás esto te sirva:
Con la propiedad del DBGrid  DBGrid.DefaultDrawing:= false;



delphi
  1. procedure TFmCtrlGrid.DBGrid1DrawColumnCell(Sender: TObject;
  2.   const Rect: TRect; DataCol: Integer; Column: TColumn;
  3.   State: TGridDrawState);
  4. begin
  5.   with Sender as TDBGrid do
  6.   begin
  7.     if State = [gdSelected] then
  8.     begin
  9.       Canvas.Brush.Color:= clRed;
  10.       Canvas.FillRect(Rect);
  11.     end;
  12.     DefaultDrawColumnCell(Rect,DataCol,Column,State);
  13.   end;
  14. end;



Saludos.
  • 0

#8 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 07 octubre 2010 - 01:35

Funciona de maravilla pero usando la propiedad dgRowSelect = True;
  • 0




IP.Board spam blocked by CleanTalk.