Тема: ListBox
Показать сообщение отдельно
  #2  
Старый 28.04.2008, 21:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Перемещение:

Код:
type
  TLBMove = (mUp, mDown);

procedure ListBoxMoveItem(AListBox : TListBox; ADirection : TLBMove);
var
  NewIdx : Integer;
begin
  If ADirection = mUp 
    Then NewIdx := AListBox.ItemIndex - 1 
    Else NewIdx := AListBox.ItemIndex + 1;
  If (NewIdx >= 0) And (NewIdx < AListBox.Items.Count) Then
    Begin
      AListBox.Items.Exchange(AListBox.ItemIndex,NewIdx);
      AListBox.ItemIndex := NewIdx;
    End;
end;

Перемещение мышом - используй внутренний Drag'n'drop. Соотв. надо реализовать обработчики нужных событий: OnDragDrop, DragOver.
В первом, по координатам вычисляется новый индекс итема, далее вызываешь Exchange. Во втором надо вернуть True, когда итем проносится над этим лист боксом.

И будет тебе счастье!
Ответить с цитированием