реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi
Скачать 1.3 Mb.
|
Операция перетаскивания drag and dropКласс TControl обеспечивает поддержку очень популярного действия drag and drop (перетащить и опустить). Эта операция позволяет реализовать операцию перетаскивания в пределах приложения, а при использовании разделяемой памяти — и между разными приложениями Delphi. Обычно перемещение происходит между двумя элементами управления, называемыми источником и приемником. Источник инициирует перетаскивание и содержит сам перетаскиваемый объект (клиент). Приемник принимает перетаскиваемый объект. Классическим примером реализации операции drag and drop служит Проводник Windows, предоставляющий услуги переноса файлов и папок при помощи операций перетаскивания. Первым шагом на пути создания интерфейса перетаскивания должна стать настройка свойства property DragKind: TDragKind; type TDragKind = (dkDrag, dkDock); В случае, если свойство находится в состоянии dkDrag — при перетаскивании реализуется технология drag and drop, в противном случае — drag and dock (операция буксировки элементов управления). Способ работы с технологией перетаскивания: property DragMode: TDragMode; type TDragMode = (dmManual, dmAutomatic); В ситуации, когда свойство переведено в автоматический режим (dmAutomatic) за старт процесса перетаскивания несет ответственность сама среда разработки Delphi. Несколько сложнее работать в режиме ручного управления (dmManual). В таком случае программист обязан самостоятельно инициировать процесс перетаскивания, вызвав метод procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1); Метод рассчитан на то, что пользователь утопит кнопку мыши над объектом-клиентом и, удерживая эту кнопку в нажатом состоянии, "потащит" объект. Если параметр Immediate установлен в true, то операция перетаскивания начинается немедленно, в противном случае — после перемещения мыши на небольшое расстояние (количество пикселов указывается в Threshold). При необходимости прервать процесс перетаскивания вызывается метод procedure EndDrag(Drop: Boolean); В случае если параметру Drop передано значение true, то результаты перетаскивания будут приняты. В противном случае произойдет отмена. За внешний вид курсора при операции перетаскивания отвечает свойство: property DragCursor: TCursor; Если элемент-приемник по каким-то причинам отказывается получать данные от источника, то внешний вид курсора над ним будет соответствовать значению crNoDrop (перечеркнутый круг). Если все в порядке, то сигналом готовности станет курсор crDrag. Процесс перетаскивания последовательно сопровождается четырьмя событиями (табл. 5.3). Таблица5.3.Последовательностьсобытийвоперацииdraganddrop
В момент начала перетягивания генерируется событие property OnStartDrag: TStartDragEvent; type TStartDragEvent = procedure(Sender: TObject; var DragObject: TDragObject) of object; В программах Delphi обработчик события OnStartDrag() задействуется только при необходимости, например для инициализации переменных, вызова дополнительных процедур и функций. Необязательный формальный параметр DragObject применяется наиболее подготовленными программистами для создания собственного экземпляра класса TDragObject, позволяющего осуществлять более тонкую настройку операций перетаскивания. Как мы уже говорили, событие OnDragOver возникает в то время, когда курсор мыши с перетаскиваемым клиентом движется над элементом-приемником, а также в момент отпускания кнопки мыши. Обработчик события уведомляет о готовности элемента-получателя принять клиента. property OnDragOver: TDragOverEvent; TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object; Параметры события приведены в табл. 5.4. Таблица5.4.ПараметрысобытияOnDragOver()
Задачей программиста является информирование приложения (через параметр Accept) о готовности или отказе приема операции drag and drop. В случае положительного решения при отпускании кнопки мыши возникает событие property OnDragDrop: TDragDropEvent; type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object; Вне зависимости от готовности элемента-приемника к получению клиента, в финале перетаскивания элемент-источник генерирует событие: property OnEndDrag: TEndDragEvent; type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object; В рамках обработчика события допускается освободить захваченные ранее ресурсы или выполнить какие-то другие действия, определяемые программистом. |