Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение позиций элементов ListBox с помощью Drag and Drop 2

Delphi , Синтаксис , Drag and Drop

Изменение позиций элементов ListBox с помощью Drag and Drop 2

Автор: Peter Donnelly

Вот еще одна вариация сабжа.


procedure TPickParty.PickListBMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    with Sender as TListBox do
    begin
      DraggedPM := ItemAtPos(Point(X, Y), True);
      if DraggedPM > l;
      = 0 then
        BeginDrag(False);
    end;
end;

procedure TPickParty.PickListBDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if Source = PickListB then
    Accept := True;
end;

procedure TPickParty.PickListBDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  NewIndex: integer;
begin
  NewIndex := PickListB.ItemAtPos(Point(X, Y), False);
  if NewIndex > PickListB.Items.Count - 1 then
    NewIndex := PickListB.Items.Count - 1;
  PickListB.Items.Move(DraggedPM, NewIndex);
  PickListB.ItemIndex := NewIndex;
end;

Программный код на языке Delphi, демонстрирующий реализацию функциональности перетаскивания и оставления (drag-and-drop) для компонента ListBox. Код состоит из трех процедур:

  1. PickListBMouseDown: Вызывается при нажатии левой кнопки мыши над контролем ListBox PickListB. Она определяет, какой элемент был выбран, вызывая метод ItemAtPos с текущим положением курсора, и если элемент был найден, она запускает операцию перетаскивания с помощью метода BeginDrag.
  2. PickListBDragOver: Вызывается при перетаскивании мыши над контролем ListBox PickListB во время операции перетаскивания. Она проверяет, является ли источник перетаскивания действительно контролом PickListB, и если это так, она устанавливает параметр Accept в значение True, указывая, что оставление разрешено.
  3. PickListBDragDrop: Вызывается при оставлении перетаскиваемого элемента над контролем ListBox PickListB во время операции перетаскивания. Она определяет, где должен быть оставлен выбранный элемент, вызывая метод ItemAtPos с текущим положением курсора, и затем перемещает выбранный элемент в это место с помощью метода Items.Move. Наконец, она устанавливает свойство ItemIndex контрола PickListB в новое значение.

Некоторые предложения по улучшению кода:

  • В процедуре PickListBMouseDown можно использовать метод GetItemAtPos вместо ItemAtPos, так как он возвращает ссылку на элемент, находящийся в указанном положении.
  • Может быть полезно добавить некоторые визуальные отображения во время операции перетаскивания, например, изменение формы курсора или выделение цели для оставления.
  • Если вы хотите позволить пользователю оставлять элементы вне контрола ListBox, можно модифицировать процедуру PickListBDragOver, чтобы установить параметр Accept в значение True, независимо от источника перетаскивания.
  • Может быть полезно добавить некоторые обработчики ошибок, если пользователь пытается оставить элемент в недопустимом положении (например, вне контрола ListBox).

В целом, этот код предоставляет основную реализацию функциональности перетаскивания и оставления для компонента ListBox в Delphi. С некоторыми дополнительными функциями и улучшениями он мог бы быть сделан более robust и пользовательски friendly.

В статье описывается реализация функции Drag and Drop в компоненте ListBox с помощью отслеживания клика левой кнопки мыши и перемещения элементов списка по координатам мыши.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Drag and Drop ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-22 17:51:12/0.0034599304199219/0