Jump to content


Photo

Drag&Drop


  • Please log in to reply
4 replies to this topic

#1 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 637 posts
  • LocationCiudad de México

Posted 11 July 2015 - 07:08 PM

Hola amigos,

 

Estoy tratando de implementar un drag&drop entre un tree y un data grid. Alguien me puede aventar un cable? ya le di vueltas y no termino.

 

La idea es arrastrar desde el tree hasta el datagrid.

 

Les dejo una imágen para que sepan de lo que hablo.

 

 

drag.png

 

 

Gracias!!

 

Fernando.


  • 0

#2 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 637 posts
  • LocationCiudad de México

Posted 19 January 2016 - 02:39 PM

Bueno, no había retomado el tema pero ayer lo implementé en menos de diez minutos (lo que se consigue leyendo el manual, verdad?)

 

La cosa es esta:

 

Tengo tres componentes

 

COMPONENTES ORIGEN

- TreeView

- DataGrid

 

COMPONENTE DESTINO

- DataGrid

 

El tree view simula un árbol empresarial con los distintos departamentos de una empresa. El grid orígen muestra los empleados de cada uno de los departamentos, los cuales se filtran dependiendo del nodo del tree sobre el que se hace click.

 

Ahora bien, se tienen dos componentes que pueden ser orígen y que apuntan el drop a un solo destino. Entonces cuando se hace mousedown en alguno de los componentes orígen se hace lo siguiente:

 

Para el TTreView


delphi
  1. procedure TFManejoEventos.oArbolDepartamentosMouseDown(Sender: TObject;
  2. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  3. begin
  4. cOrigenDrag := 'ARBOL';
  5. Self.oArbolDepartamentos.BeginDrag(true);
  6. end;

Para el DataGrid:


delphi
  1. procedure TFManejoEventos.NextDBGrid1MouseDown(Sender: TObject;
  2. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  3. begin
  4. cOrigenDrag := 'EMPLEADOS';
  5. Self.NextDBGrid1.BeginDrag(true);
  6. end;

Declaro una variable string (puede ser bool, numérica, lo que quieran) para indicar desde donde viene el drag.

 

Y el código que se declara para el componente destino es el siguiente:


delphi
  1. procedure TFManejoEventos.oGridBuscaEmpleadoDragOver(Sender, Source: TObject; X,
  2. Y: Integer; State: TDragState; var Accept: Boolean);
  3. begin
  4.  
  5. If cOrigenDrag = 'EMPLEADOS' then
  6. Accept := Source IS TNextDBGrid
  7. ELSE
  8. Accept := Source IS TTreeview;
  9.  
  10. end;
  11.  
  12.  
  13. procedure TFManejoEventos.oGridBuscaEmpleadoDragDrop(Sender, Source: TObject; X,
  14. Y: Integer);
  15. begin
  16. //-- Si se arrastra un empleado
  17. If cOrigenDrag = 'EMPLEADOS' then
  18. bUnoDerClick(Self)
  19. else
  20. bTodosDerClick(self);
  21. end;

Lo que hago es que dependiendo de donde venga, llamo a un procedure que inserta, o el empleado seleccionado, cuando viene del grid, o todos los empleados del departamnto, cuando viene del Tree.

 

Y listo, problema resuelto.

 

 

- No tengo idea de cómo agregar una imágen para que vean cómo se ve, pero pues ya quedó, y si alguien desea opinar o sugerir, pierde el tiempo. :cheesy: :cheesy:


  • 4

#3 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 posts
  • LocationEspaña

Posted 20 January 2016 - 12:10 AM

Gracias por compartir

 

Saludos


  • 0

#4 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 20 January 2016 - 05:56 AM

Excelente Fer. Gracias


  • 0

#5 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 posts
  • LocationMisiones, Argentina

Posted 20 January 2016 - 07:29 AM

Gracias Fer,

 

La verdad, aunque parezca mentira, jamás implementé "un" drag&drop.

 

Saludos


  • 0




IP.Board spam blocked by CleanTalk.