PDA

Ver la Versión Completa : marcar varias filas en grid con raton


nugame
22-09-2005, 18:40:16
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
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.


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:


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:

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
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