Mega Code Archive

 
Categories / Delphi / VCL
 

Adding drag - drop to a tlistbox

How do I do drag and drop in a TListbox? -------------------------------------------------------------------------------- Adding Drag and Drop facilities to a listbox is a matter of checking to see if there is an item under the mouse pointer in the MouseDown event, and if so save the item text and the index number to variables. Then check the MouseUp event to see if there is a different item under the mouse. If so, delete the old item and insert a copy of it in the new position. Firstly, add three variables to the private section: { Private declarations } Dragging: Boolean; OldIndex: Integer; TempStr: String; Then add the following code to the MouseUp and MouseDown events: procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Index: integer; begin if Dragging then begin Index := ListBox1.ItemAtPos(point(x, y), true); if (Index > -1) and (Index <> OldIndex) then begin ListBox1.Items.Delete(OldIndex); ListBox1.Items.Insert(Index, TempStr); ListBox1.ItemIndex := Index; end; end; Dragging := false; end; procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Index: integer; begin Index := ListBox1.ItemAtPos(point(x, y), true); if Index > -1 then begin TempStr := ListBox1.Items[Index]; OldIndex := Index; Dragging := true; end; end;