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
procedure TFManejoEventos.oArbolDepartamentosMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
cOrigenDrag := 'ARBOL';
Self.oArbolDepartamentos.BeginDrag(true);
end;
Para el DataGrid:
procedure TFManejoEventos.NextDBGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
cOrigenDrag := 'EMPLEADOS';
Self.NextDBGrid1.BeginDrag(true);
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:
procedure TFManejoEventos.oGridBuscaEmpleadoDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
If cOrigenDrag = 'EMPLEADOS' then
Accept := Source IS TNextDBGrid
ELSE
Accept := Source IS TTreeview;
end;
procedure TFManejoEventos.oGridBuscaEmpleadoDragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
//-- Si se arrastra un empleado
If cOrigenDrag = 'EMPLEADOS' then
bUnoDerClick(Self)
else
bTodosDerClick(self);
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:](http://delphiaccess.com/foros/public/style_emoticons/default/cheesy.gif)