Как переместить пункты ListBox при помощи мыши
Вот как можно менять позиции элементов списка ListBox с помощью перетаскивания:
- Поместите компонент TListBox (lbTest) на форму.
- Добавьте несколько элементов списка при помощи свойства Items.
Установите свойство DragMode компонента ListBox в dmAutomatic (это можно сделать в Инспекторе объектов или в событии OnCreate формы).
Напишите перехватчик в событиях DragOver и DragDrop компонента ListBox.
var Form1: TForm1; start: TPoint; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin lbTest.DragMode:= dmAutomatic; end; procedure TForm1.lbTestDragDrop(Sender, Source: TObject; X, Y: Integer); var dropPos, startPos: integer; dropPoint: TPoint; begin dropPoint.X:= X; dropPoint.Y:= Y; with Source as TListBox do begin startPos:= ItemAtPos(start, true); dropPos:= ItemAtPos(dropPoint, true); Items.Move(startPos, dropPos); end; end; procedure TForm1.lbTestDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:= Source = lbTest; end; procedure TForm1.lbTestMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin start.X:= X; start.Y:= Y; end;
Комментарии