Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

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

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

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


procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  with (Sender as TListBox) do
    Items.Move(ItemIndex,ItemAtPos(Point(x,y),True));
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
  Accept := (Sender=Source);
end;

Не забудьте в ListBox присвоить свойству DragMode значение dmAutomatic.

Here's the translation of the text into Russian:

Делфи-код, демонстрирующий реализацию функциональности drag-and-drop в компоненте TListBox. Метод TListBoxDragDrop используется для перемещения элемента из источника в целевую позицию внутри самого списка.

Обзор кода:

  1. В процедуре Listbox1DragDrop объект-отправитель (который является списком) кастится в TListBox. Метод Items.Move используется для перемещения элемента из его текущей позиции в новую позицию, указанную операцией drag-and-drop.
  2. Функция ItemAtPos используется для расчета индекса элемента по координатам x и y внутри списка.

Процедура Listbox1DragOver обрабатывает событие drag-over, которое возникает при перетаскивании элемента над другим компонентом (в этом случае, над тем же списком). Параметр Accept устанавливается в True, если источник и целевая позиция одинаковы, что указывает на то, что операция drop является корректной.

Совет: не забудьте установить свойство DragMode вашего списка TListBox в dmAutomatic, как вы упомянули. Это позволяет автоматически включать функциональность drag-and-drop внутри списка.

Альтернативное решение с использованием события Listbox1DragOver:

procedure TForm1.Listbox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Sender = Listbox1) and (Source = Listbox1) then
    Accept := True;
end;

procedure TForm1.Listbox1Drop(Sender: TObject; X, Y: Integer);
var
  Index: Integer;
begin
  Index := Listbox1.ItemIndexAtPos(Point(X, Y));
  if Index >= 0 then
    Listbox1.Items.Move(Listbox1.ItemIndex, Index);
end;

В этом альтернативном решении событие Listbox1DragOver просто устанавливает параметр Accept в True, если источник и целевая позиция одинаковы. Событие Listbox1Drop используется для перемещения элемента в его новую позицию на основе координат x и y операции drop.

Не забудьте установить свойство DragMode в dmAutomatic для этого решения также!

Изменение позиций элементов ListBox с помощью Drag и Drop позволяет перемещать элементы списка с помощью перетаскивания курсора мыши, а затем сохранять новую позицию элемента в списке.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-05-19 17:53:24
2024-05-20 07:50:49/0.0069499015808105/2