Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-09-2005
nugame nugame is offline
Miembro
 
Registrado: may 2003
Posts: 50
Poder: 21
nugame Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 22-09-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 23-09-2005
nugame nugame is offline
Miembro
 
Registrado: may 2003
Posts: 50
Poder: 21
nugame Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 23-09-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 23-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 23-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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!

Última edición por jmariano fecha: 23-09-2005 a las 16:14:07.
Responder Con Cita
  #7  
Antiguo 23-09-2005
Avatar de Kreyser
Kreyser Kreyser is offline
Miembro
 
Registrado: ago 2004
Ubicación: Barcelona
Posts: 114
Poder: 20
Kreyser Va por buen camino
Post

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.
__________________
"Es imposible hacer un programa 100% contra tontos, ya que éstos son muy ingeniosos"

Última edición por Kreyser fecha: 23-09-2005 a las 16:37:28.
Responder Con Cita
  #8  
Antiguo 26-09-2005
nugame nugame is offline
Miembro
 
Registrado: may 2003
Posts: 50
Poder: 21
nugame Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:37:47.


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
Copyright 1996-2007 Club Delphi