Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Se puede dejar fija o bloquear la fila seleccionada en un dbgrid? (https://www.clubdelphi.com/foros/showthread.php?t=58610)

Angel Fernández 25-07-2008 17:55:53

¿Se puede dejar fija o bloquear la fila seleccionada en un dbgrid?
 
Saludos al foro.

Quisiera preguntar una cosilla que no sé si es posible. Como digo en el título, ¿se puede bloquear o dejar fija la fila seleccionada en un DBGrid? Es decir, yo tengo una fila seleccionada y cuando muevo la rueda del ratón encima del dbgrid, la fila seleccionada (el registro activo) se mueve con el movimiento del ratón.
Lo que quiero es que la fila seleccionada quede fija o bloqueada aunque mueva la rueda del ratón o mueva la barra de desplazamiento vertical y sólo cambie la fila seleccionada cuando haga click en otra fila (como funciona un listview o un listbox por ejemplo).
¿Se puede hacer?

Gracias de antemano.

yugi789 21-07-2011 23:56:16

Perdon por revivir pero tengo el mismo problema. Por favor ayuda.

ecfisa 22-07-2011 01:56:53

Hola yugi789.

Probá de este modo:
Código Delphi [-]
type
  TForm1 = class(TForm) 
    procedure FormShow(Sender: TObject);
    ...
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure MouseEvent(var Msg: TMsg; var Handled: Boolean);
  public
  end;

...

implementation

(* CAPTURAR MENSAJE EVENTO MOUSE *)
procedure TForm1.MouseEvent(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.Message =  WM_MOUSEWHEEL then
   Handled:= True;
end;

(* DESACTIVAR MOUSEWHEEL Y SCROLLBAR VERTICAL *)
procedure TForm1.FormShow(Sender: TObject);
begin
  Application.OnMessage:= MouseEvent;
  EnableScrollBar(DBGrid1.Handle,SB_VERT,ESB_DISABLE_BOTH); // Scrollbar desactivado
end;

...

(* ACTIVAR MOUSEWHEEL Y SCROLLBAR VERTICAL *)
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  EnableScrollBar(DBGrid1.Handle,SB_VERT,ESB_ENABLE_BOTH); // ScrollBar activado
  Application.OnMessage:= nil;
end;

Edito: Si querés que también ignore las teclas arriba/abajo deberías evaluarlas en el evento OnKeyDown del DBGrid.

Saludos.

yugi789 23-07-2011 02:50:59

Muchas gracias por responder. Lamentablemente,que deshabilite la barra no me sirve. Necesito que el registro seleccionado(Rowselect) permanesca fijo mientras me desplazo con la barra. Saludos.

ecfisa 23-07-2011 04:53:16

Hola yugi789.

Había entendido que la selección debería quedar fija hasta que se hiciera click sobre otra fila como dice el mensaje:
Cita:

Lo que quiero es que la fila seleccionada quede fija o bloqueada aunque mueva la rueda del ratón o mueva la barra de desplazamiento vertical y sólo cambie la fila seleccionada cuando haga click en otra fila
Pero a ver si entiendo el nuevo planteo. ¿ Querés que el DBGrid desplace sus líneas (registros) y que no cambie la selección realizada con el Click ?

Saludos.

yugi789 23-07-2011 05:07:35

Cita:

Empezado por ecfisa (Mensaje 407232)
Hola yugi789.

Pero a ver si entiendo el nuevo planteo. ¿ Querés que el DBGrid desplace sus líneas (registros) y que no cambie la selección realizada con el Click ?

Saludos.

Si eso exactamente. (Para desplazarme quiero utilizar la barra o teclas o la rueda del mouse). Saludos.

ecfisa 23-07-2011 05:35:31

Hola yugi789.

El TDBGrid contiene el número de registros que son visibles. Cuando se hace un desplazamiento y necesita mostrar otros datos los obtiene del TDataSet solicitándolos a el TDataSource asociado y por supuesto perdíendose la selección actual.

La única manera que se me ocurre es agregando al DataSet un campo bivalente que funcione como bandera y mediante el click tome los valores de seleccionado o no.
Luego valerse del evento OnDrawColumnCell para pintar la fila si el valor figura como seleccionado.

Un saludo.


La franja horaria es GMT +2. Ahora son las 01:53:52.

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