Jump to content


Photo

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


  • Please log in to reply
7 replies to this topic

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 posts
  • LocationMéxico

Posted 14 September 2010 - 03:06 PM

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 posts
  • LocationEspaña

Posted 14 September 2010 - 03:27 PM

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
  • 2092 posts
  • LocationRepública Dominicana

Posted 14 September 2010 - 03:40 PM

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 posts
  • LocationMéxico

Posted 14 September 2010 - 07:15 PM

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
  • 2092 posts
  • LocationRepública Dominicana

Posted 15 September 2010 - 06:25 AM

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 posts
  • LocationEspaña

Posted 15 September 2010 - 09:26 AM

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
  • 4111 posts
  • LocationMadrid - España

Posted 15 September 2010 - 11:35 AM

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 posts
  • LocationMéxico

Posted 07 October 2010 - 01:35 PM

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




IP.Board spam blocked by CleanTalk.