Do LeWy:
Mialem napisac o tym wiecej, ale nie mam czasu sie tym zajac,
przedstawiam Ci droge postepowania:

DragIndex: integer - dowolna zmienna do przechowywania indeksu do przesuniecia.

W OnMouseDown Listbox'a:
DragIndex := ListBox1.ItemIndex;

W OnMouseUp Listbox'a:
if ListBox1.ItemIndex&lt=DragIndex then begin
ListBox1.Items.Insert(ListBox1.ItemIndex, ListBox1.Items[DragIndex]);
ListBox1.Items.Delete(DragIndex+1);
end else begin
ListBox1.Items.Insert(ListBox1.ItemIndex, ListBox1.Items[DragIndex]);
ListBox1.Items.Delete(DragIndex);
end;

Musisz to sprawdzic i dopracowac (prawdopodobnie bedzie kasowal nie to co trzeba)

powodzenia
Astacus (D5 Pro)

P.S.: Niekiedy nie mozna odpowiadac w watku...