«

»

Mar 26

Arrastrar y soltar entre listas (Drag and Drop)

Lo primero a tener en cuenta es que lo que se arrastra de un contenedor tiene que ser compatible con el contenedor receptor. Lo habitual es que se arrastren y suelten strings (cadenas) entre listas de strings, es lo más básico. En el ejemplo se arrastrará y soltará desde una lista del tipo TFileListBox a otra del tipo TListBox.

Hay que preparar ambos objetos, el TFileListBox para que permita arrastrar sus ítems y a TListBox para que acepte lo que le llega de TFileListBox.

En un Form crear ambos componentes y dejarles su nombre por default (TFileListBox1 y ListBox1).

Desde el inspector de objetos seleccionamos FileListBox1 y establecemos dmAutomatic en la propiedad DragMode. Con esto solo conseguimos que los elementos contenidos en esa lista se puedan arrastrar. Y con este elemento no es necesario hacer más nada.

Ahora seleccionamos también desde el inspector de objetos ListBox1, en Eventos, definimos OnDragDrop y OnDragOver. (definimos = hacer click en el botón con los ‘…’).

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source is TFileListBox) then ListBox1.AddItem(FileListBox1.items[FileListBox1.ItemIndex],ListBox1);
end;

ListBox1 agregará ítems que provengan de objetos del tipo TFileListBox.

 

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
		State: TDragState; var Accept: Boolean);
begin
  Accept:=(Source is TFileListBox);
end;  

ListBox1 aceptará que objetos del tipo TFileListBox le suelten ítems.

Arrastrar y soltar entre listas – Lazarus from lazarus.elsigno.com on Vimeo.