The TListBox Delphi component displays a collection of items in a scrollable list. Delphi makes it easy to program into your applications.
Here's how to allow a user to rearrange (change item's position) the items of a ListBox using drag and drop:
- Drop a TListBox (named ListBox1) on a form
- Add several strings using the Items property
- Set ListBox1's DragMode to dmAutomatic (in Form's OnCreate or using Object Inspector at design-time).
- Handle LisBox-es MouseDown, DragOver and DragDrop events
var // form level StartingPoint : TPoint; implementation ... procedure TForm1.FormCreate(Sender: TObject) ; begin ListBox1.DragMode := dmAutomatic; end; procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer) ; var DropPosition, StartPosition: Integer; DropPoint: TPoint; begin DropPoint.X := X; DropPoint.Y := Y; with Source as TListBox do begin StartPosition := ItemAtPos(StartingPoint,True) ; DropPosition := ItemAtPos(DropPoint,True) ; Items.Move(StartPosition, DropPosition) ; end; end; procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) ; begin Accept := Source = ListBox1; end; procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) ; begin StartingPoint.X := X; StartingPoint.Y := Y; end;How to Move ListBox Items with the Mouse