Drag and Drop - как использовать ItemAtPos для получения элемента DirListBox
Просто сохраните результат функции ItematPos в переменной формы, и затем
используйте эту переменную в обработчике ListBoxDragDrop. Пример:
FDragItem := ItematPos(X, Y, True);
if FDragItem >= 0 then
BeginDrag(false);
...
procedure TForm1.ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
beginif Source is TDirectoryListBox then
ListBox.Items.Add(TDirectoryListBox(Source).GetItemPath(FDragItem));
end;
Here's the translation of the text into Russian:
Вопрос по Delphi!
Вы хотите использовать функцию ItemAtPos, чтобы получить элемент в конкретной позиции в DirListBox, и добавить его в свой основной список при перетаскивании и отпускании.
Разбивка кода:
В обработчике события DragDrop координаты X и Y представляют собой координаты, где пользователь опустил элемент.
Функция ItemAtPos вызывается с этими координатами и булевым параметром (True) для указания, что мы хотим найти элемент в указанной позиции.
Если элемент найден (т.е. FDragItem >= 0), процедура BeginDrag вызывается для начала операции перетаскивания.
Теперь поговорим о альтернативном решении:
Вместо передачи FDragItem как глобальной переменной, вы могли бы передать ее в параметр обработчика события ListBoxDragDrop. Это сделает код более модульным и проще для обслуживания.
Обновленная версия:
procedure TForm1.ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
var
FDragItem: Integer;
begin
if Source is TDirectoryListBox then
begin
FDragItem := ItemAtPos(X, Y, True);
if FDragItem >= 0 then
ListBox.Items.Add(TDirectoryListBox(Source).GetItemPath(FDragItem));
end;
end;
Попав FDragItem как локальную переменную в обработчик события, вы избежите загрязнения глобального пространства и сделаете код более автономным.
В целом:
Ваши оригинальные код работает нормально, но лучше передавать FDragItem в параметр обработчика события для лучшей модульности.
Обновленный код более модульный и проще для обслуживания.
Данная статья описывает использование функции ItemAtPos для получения элемента DirListBox в приложении Delphi, чтобы реализовать Drag-and-Drop операцию.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.