Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Тема 16 Перетаскивание объектов.doc
Скачиваний:
44
Добавлен:
23.03.2015
Размер:
54.27 Кб
Скачать

Событие 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.

Теперь вы можете создать форму с несколькими списками, занести в них информацию, написать эти обработчики и проверить все это на практике.