Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-09-2007
Avatar de pborges36
pborges36 pborges36 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Argentina
Posts: 192
Poder: 20
pborges36 Va por buen camino
Drag and Drop entre DBGrids

Hola a todos. Estoy tratando de hacer un Drag and drop entre DBGrids. Gracias a Neftali, quien puso un ejemplo en su pagina, pude lograrlo.
El procedimiento entre las DBGrids funciona de 10, pero cuando hago click en alguna de ellas para seleccionar un registro, no pasa nada. Solo puedo seleccionar un registro con el teclado, no con el mouse. Habra alguna propiedad que me permita seleccionar un registro con el mouse?
Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 20-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Como empiezas entonces el Drag&Drop, con el ratón, no ?

No he entendido bien tu pregunta, dices que si hacer Click con el ratón en alguno de los DBGrid's no te selecciona el registro correspondiente que tienes justo debajo del cursor del ratón ?

Eso lo debería hacer el propio DBGrid sin más.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 20-09-2007
Avatar de pborges36
pborges36 pborges36 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Argentina
Posts: 192
Poder: 20
pborges36 Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
hacer Click con el ratón en alguno de los DBGrid's no te selecciona el registro correspondiente que tienes justo debajo del cursor del ratón ?
Eso es exactamente lo que sucede, cosa que no sucedia antes de hacer esto de Drag and Drop.
Responder Con Cita
  #4  
Antiguo 20-09-2007
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
prueba a activar el drag and drop no en el evento onclic sino en el doble click, seria la solución


proque al hacer clic se activa el drag y no la selección.
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #5  
Antiguo 20-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
En este caso lo que yo no utilizaría el Doble Click, ya que nadie está acostumbrado a empezar un Drag&Drop con un Doble Click del ratón.

La solución pasa por activar el Drag&Drop de forma manual y no automática. Para ello pon la propiedad DragMode a dmManual (por defecto), y en el evento OnMouseClick de cada uno de los DBGrid's pon :

Código Delphi [-]
  if (Button = mbLeft) and (not IBDataSet1.IsEmpty) then
    DBGrid1.BeginDrag(False,10);

siendo IBDataSetX el DataSet asociado a cada Grid, y DBGridX el DBGrid correspondiente.

Ello te provocará que el Drag&Drop no comienze hasta que muevas el cursor del raton 10 pixel's, y de esta manera mantengas total funcionalidad en la selección de los registros.

Espero te ayude. Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 20-09-2007
Avatar de pborges36
pborges36 pborges36 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Argentina
Posts: 192
Poder: 20
pborges36 Va por buen camino
Va tomando forma.

muchas gracias gluglu, Hice lo que dijiste y funciona, solo un detalle: Para arrastrar debo hace click en la parte vacia del DBGrids, si hago click sobre un registro no hace nada. Para mi que tiene algo que ver con alguna propiedad del DBGrid. Puede ser?
Responder Con Cita
  #7  
Antiguo 20-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Pues tienes razón. No lo había probado con el TDBGrid normal.

Resulta que tengo un DBGrid mínimamente modificado para poder hacer selecciones múltiples en el DBGrid con Shift. Esto ya lo comenté en su día aqui.

Para ello me he tenido que derivar mi propio DBGrid que me permite MultiSelección.

Aquí tienes el código :

Código Delphi [-]
unit DBMultiSelectGrid;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids;
 
type

  TDBMultiSelectGrid = class(TDBGrid)
  private
    { Private declarations }
    FOnMouseDown: TMouseEvent;
  protected
    { Protected declarations }
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  published
    { Published declarations }
    property Row;
    property OnMouseDown read FOnMouseDown write FOnMouseDown;
  end;
 
procedure Register;
 
implementation
 
procedure TDBMultiSelectGrid.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(FOnMouseDown) then
    FOnMouseDown(Self, Button, Shift, X, Y);
  inherited MouseDown(Button, Shift, X, Y);
end;
 
procedure Register;
begin
  RegisterComponents('Data Controls', [TDBMultiSelectGrid]);
end;
 
end.

Como podrás observar, redefino el evento OnMouseDown. De esta manera funciona. No sabría ahora mismo como hacerlo sin derivar tu propio componente DBGrid particular como lo he indicado.

Por otro lado me he dado cuenta con tu indicación que con el DBGrid normal y estandar no funciona.

Saludos.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #8  
Antiguo 20-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Por qué hacerlo fácil se si puede hacer complicado, no es verdad ?

Todo mi comentario anterior se puede olvidar y resumir el asunto en esto :

Código Delphi [-]
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  DBGrid1.BeginDrag(False,10);
end;

__________________
Piensa siempre en positivo !
Responder Con Cita
  #9  
Antiguo 20-09-2007
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
wow gluglu, felicidades...

y si, en el dobliclick seria incongruente...

buena respuesta
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #10  
Antiguo 20-09-2007
Avatar de pborges36
pborges36 pborges36 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Argentina
Posts: 192
Poder: 20
pborges36 Va por buen camino
Thumbs up

Efectivamente, gluglu, eso es lo que necesitaba. Funciona a la perfeccion. Muchas Gracias!!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Drag & Drop DanForever Varios 2 01-06-2006 14:24:25
Drag&Drop !!! rafstyle OOP 6 27-07-2004 04:39:41
Drag&Drop entre dos TreeView ceocarbajal OOP 1 08-05-2004 09:21:41
Drag&Drop xflo Lazarus, FreePascal, Kylix, etc. 0 13-10-2003 19:31:22
Drag & Drop cone220 Varios 1 26-05-2003 19:06:34


La franja horaria es GMT +2. Ahora son las 11:09:34.


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