PDA

Ver la Versión Completa : problema cambiar formato de fila en dbGrid


VRO
30-09-2004, 18:08:13
Hola gente del Club Delphi, he hecho una pregunta similar en otro hilo pero referente a una TreeView pero ya hallé la solución ahora mi problema es co el dbGrid.

Necesito cambiar el color de una fila, ya se que es un tema muy comentado en el foro, he realizados varias busquedas pero lo que he visto no me sirve ó eso creo yo,vereis tengo un dbgrid en el formulario con más componentes y lo que yo quiro es cuendo pulso fuera del dbgrid que la fila que tenía seleccionada me cambie de color, con el TreeView lo he hecho con la propiedad HideSelection y me lo pone en color gris, es decir, quita el foco pero se mantiene seleccionado. ¡Habría alguna propiedad así en el DBGrid?,

he probado con la propiedad

dbgrid.options
dgAlwaysShowSelection


pero no me sirve ya que aparece una fila del dbgrid selecionada en cuanto se ejecuta la aplicación y yo sólo quiero que seleccione una fila cuando pinche en ella. Tambien he probado con el metodo dbGridDrawColumnCell()
pero no se como poner la condición que sería

cuando no este un se encuentre el foco en el dbGrid que la fila que estaba selecionada cambie de color, creo que con el método anteriormente nombrado no me sirve ya que el cambio de color se haría en el metodo dbGridExit, es decir, cuando he salido del dbgrid el que estaba selecionado que cambie de color.

Si alguien tiene alguna idea de como hacerlo. Espero que me hayan entendido, si no es así por favor comuniquenmelo.

Gracias por su ayuda en este y tantos otros problemas que me han resuelto.

aglopez
01-10-2004, 10:28:25
Prueba con este código en los eventos OnEnter y OnExit a ver si es lo que
buscabas.


procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
DBGrid1.Options:=DBGrid1.Options-[dgrowselect,dgAlwaysShowSelection];
end;

procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
DBGrid1.Options:=DBGrid1.Options+[dgrowselect,dgAlwaysShowSelection];
end;

VRO
01-10-2004, 16:52:15
Gracias sólo con poner la instrucción en el método exit ya funciona, ahora voy a investigar para en vez que la mantega seleccionado en color azul lo cambie a gris.

Muchísimas gracias , amigo .

VRO
01-10-2004, 17:37:48
POr si ha alguien le interesa pongo la solución, para ello utilizo una función tan comentada como es:


if (dbgrid.Options=dbgrid.Options+[dgAlwaysShowSelection]) and (gdselected in state) then
begin
dbgrid.Canvas.Brush.Color:=clMenu;
dbgrid.Canvas.Font.color:=clInfotext;
end;

dbgrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);


La condición expuesta puede ser redundante ya que pongo que el dbgrid continue se muestre selecionada y pongo también (gdSelected in state), es decir, que es estado sea selecionado, pues bien explico porque si no pongo esto último sería en caso de que exista un campo selecionado coloreo todo el dbgrid y poniendo esa consición más me colorea solo el campo selecionado en el dbgrid, que es lo que yo quería.

Espero que lo hayais entendido y que le sirva a alguien de ayuda.

Chao

aglopez
01-10-2004, 17:38:52
Si te funciona solo con el evento OnExit, pero si no pones el OnEnter
al entrar en el DBGrid no podrás modicar datos. Si no necesitas modificar, entonces no te hace falta.

Saludos.