Author: Tomas Rutkauskas
I have a TListBox with, say, 10 strings, and I want to be able to use Drag and Drop
to reorder those 10 items at runtime. How exactly do I do that?
Answer:
Here's the code I use to do list reordering. Create a new form, place a TListBox on
it, set its DragMode property to dmAutomatic and connect the following event
handlers.
1 2 procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
3 var4 aListBox: TListBox;
5 DropIndex: Integer;
6 begin7 aListBox := Sender as TListBox;
8 DropIndex := aListBox.ItemAtPos(Point(X, Y), False);
9 if aListBox.ItemIndex < DropIndex then10 dec(DropIndex);
11 aListBox.Items.Move(aListBox.ItemIndex, DropIndex);
12 aListBox.ItemIndex := DropIndex;
13 end;
14 15 procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
16 State: TDragState; var Accept: Boolean);
17 begin18 Accept := Sender = ListBox1;
19 end;