Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   marcar varias filas en grid con raton (https://www.clubdelphi.com/foros/showthread.php?t=25449)

nugame 22-09-2005 18:40:16

marcar varias filas en grid con raton
 
Hola:

Me gustaria saber como puedo marcar o desmarcar usando el ratón en un dbgrid, o en un rxdbgrid o en un stringrid.
El problema que tengo es que con el teclado si me deja pero quisiera hacerlo con el ratón para poder marcar o desmcarcar alguna fila

Gracias

Johnny Q 22-09-2005 20:04:21

Hola,

Si no estoy mal el DBGrid en la propiedad OPTIONS tiene una opcion dgMultiSelect, que si se pone en True permite seleccionar varias filas a la vez.

nugame 23-09-2005 11:37:13

pero seria solo con el raton
 
Hola:

El problema que tengo es que no seria con el teclado sino sólo con el ratón ya que seria para uina opción de pantalla tactil.
Como me comentas si me deja pero con el teclado y pulsando el Ctrl pero si uso el ratón y marco por ejemplo el primer registro lo hace pero al marcar por ejemplo el tercero no deja marcado el primero.

Gracias y un saludo para todos

Johnny Q 23-09-2005 15:18:52

si yo oprimo la tecla Control y simultaneamente hago click con el raton si puedo seleccionar varias filas, pero si mal no entiendo lo que tu quieres es solo utilizar el ratón, sin tener que utilizar combinaciones como ctrl + click. La verdad algo como eso nunca lo he hecho.

Saludos y espero que puedas encontrar alguna solución.

Lepe 23-09-2005 16:06:10

en una barra de herramientas pon un boton tipo Check que se quede presionado o liberado. Al apretar ese boton, activas una bandera y así puedes controlar la tecla Ctrl.

Código Delphi [-]
procedure Mousedown(......Shift:TShiftStates);
begin

if Bandera then
 Shift := shift + [ssCtrl]
else
  Shift := Shift - [ssCtrl];

Si no funciona, puedes acceder al grid, y por código añadir la fila seleccionada con DBGrid.SelectedRows (creo que era así)

Un saludo

jmariano 23-09-2005 16:08:36

Como comenta Lepe, existe una forma: moviéndonos manualmente por los registros y marcando cada registro del DBGrid como seleccionado (a través de la propiedad 'SelectedRows') en el evento 'OnMouseMove' del DBGrid.

Prueba los siguiente:

Código Delphi [-]
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
    with DBGrid1 do
      if dgMultiSelect in Options then
      begin
        DataSource.DataSet.MoveBy(MouseCoord(X, Y).Y - DataSource.DataSet.RecNo);
        SelectedRows.CurrentRowSelected := True;
      end;
end;

El único problema es que el método 'MouseCoord' (que devuelve la fila y columna donde nos encontramos según la posición del ratón dentro del DBGrid) siempre devuelve la columna y fila relativa al área de cliente, por lo que la selección fallaría si se hiciera en mitad de la tabla (salvo que todos los registros requeridos quepan en el DBGrid, es decir, sin tener que hacer un desplazamiento hacia abajo para localizar el primer registro de la selección).

Saludos!

Kreyser 23-09-2005 16:33:22

También podrías intentar algo en el estilo:

Código Delphi [-]
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
keybd_event(VK_CONTROL,0,0,0 );
end;

Es una idea.
Saludos.;)

nugame 26-09-2005 13:21:08

Gracias a todos por las respuestas
 
Usé al final keybd_event(VK_CONTROL,0,0,0) y me funciona, el problema es al salir, creo que tengo que utilizar keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
porq sino me queda el control activado.

En que evento me recomendais en el onexit del grid?
Es que en el mousedown a veces no me funciona bien.

Gracias a todos


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

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