
- •Перетаскивание объектов 4 Перетаскивание объектов Перетаскивание информации об объектах — технология Drag&Drop
- •Начало процесса перетаскивания
- •Событие OnStartDrag
- •Информирование о готовности принять информацию Событие OnDragOver
- •Обеспечение приема информации Событие OnDragDrop
- •Событие OnEndDrag
Событие OnEndDrag
После завершения или прерывания перетаскивания в перетаскиваемом объекте наступает событие OnEndDrag. Событие OnEndDrag наступает при любом окончании процесса перетаскивания компонента по технологии Drag&Drop - успешном (компонент перетащен в приемник) или безуспешном (компонент отпущен над формой или компонентом, не способным его принять).
Параметр Sender - это сам объект перетаскивания. Параметр Target - это компонент-приемник, если объект был им принят, или nil, если перетаскивание закончилось неудачей.
В обработчике этого события можно предусмотреть какие-то дополнительные действия. Например, выдать сообщение о том завершен процесс перетаскивания или прерван. В приведенном примере, сообщения будут выдаваться если установлен флажок в CheckBox.
procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if CheckBox1.Checked then
if Target = nil Then
ShowMessage('Перенесение объекта '+ (Sender as TControl).Name + ' прервано')
else
ShowMessage((Sender as TControl).Name + ' перенесена в '
+ (Target as TControl).Name);
end;
Параметр Senderзадает объект, который перемещается, а параметрTargetзадает объект, который принимает.
Теперь, объединив приведенные выше фрагменты обработки перетаскивания, просуммируем, что надо сделать, если вы имеете в приложении несколько списков ListBox и хотите обеспечить возможность копирования строк каждого из этих списков в любой другой.
Это потребует двух операций:
• Напишите для одного списка приведенный выше обработчик события OnDragOver. Для всех остальных списков с помощью Инспектора Объектов сошлитесь в событияхOnDragOver на этот же обработчик. Все это можно даже сделать проще: выделите на форме все списки, объединив их таким образом в одну группу и с помощью Инспектора Объектов напишите обработчик событияOnDragOver сразу для всей группы.
• Напишите аналогичным образом для всех списков приведенный выше обработчик события OnDragDrop.
И это все! Для обеспечения возможности перетаскивания вам потребовалось написать всего два оператора. Если вы хотите начинать перетаскивание только при выполнении какого-то дополнительного условия, например, при нажатии клавиши Alt, то вам потребуется сделать еще один шаг:
• Задайте для всех списков значение свойства DragMode, равноеdmManual. Напишите описанным выше способом для всех списков приведенный выше обработчик событияOnMouseDown.
Теперь вы можете создать форму с несколькими списками, занести в них информацию, написать эти обработчики и проверить все это на практике.