Noch eine Ergänzung: wenn DragMode = dmAutomatic, dann muss man überlegen, was passieren soll, wenn der Benutzer aus dem leeren Teil der ListBox zieht. Und wie geht man um mit der Tatsache, dass kein oder mehrere Items selektiert wurden? DragItemIndex ist als private form variable zu deklarieren:
Delphi-Quellcode:
procedure TDemoForm.EditDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TListBox) // accept item from listbox only
and (TListBox(Source).SelCount = 1) // drag one only
and (DragItemIndex <> -1); // selection by mouse is mandatory
end;
procedure TDemoForm.EditDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
with Source as TListBox do
TEdit(Sender).Text := Items[DragItemIndex];
end;
procedure TDemoForm.ListBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
DragItemIndex := ListBox.ItemAtPos(Point(X, Y), true);
end;
Freundliche Grüße vom marabu