Vielleicht gibt es noch einen eleganteren Weg, aber so geht es auch:
1. Listbox.AllowDrag auf True setzen
2. Item ziehen und auf gewünschter Position loslassen
Im OnDragDrop-Event der ListBox musst Du auf das Drop reagieren und zwar so:
Delphi-Quellcode:
procedure TForm40.ListBox1DragDrop(Sender: TObject; const Data: TDragObject;
const Point: TPointF);
var
LI: TListBoxItem;
begin
if Data.Source is TListboxItem then begin
LI := ListBox1.ItemByPoint (Point.X, Point.Y);
Listbox1.ItemsExchange(LI, TListboxItem (Data.Source));
end;
end;