Главная страница
Навигация по странице:

  • Таблица

  • События Инициатор Описание

  • Параметр Возможные

  • реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi


    Скачать 1.3 Mb.
    НазваниеЛр операторы и выражения Delphi
    Дата17.04.2023
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлареферат Простые операторы. Характеристика форм.docx.doc
    ТипПрограмма
    #1067638
    страница22 из 26
    1   ...   18   19   20   21   22   23   24   25   26

    Операция перетаскивания drag and drop


    Класс TControl обеспечивает поддержку очень популярного действия drag and drop (перетащить и опустить). Эта операция позволяет реализовать операцию перетаскивания в пределах приложения, а при использовании разделяемой памяти — и между разными приложениями Delphi. Обычно перемещение происходит между двумя элементами управления, называемыми источником и приемником. Источник инициирует перетаскивание и содержит сам перетаскиваемый объект (клиент). Приемник принимает перетаскиваемый объект. Классическим примером реализации операции drag and drop служит Проводник Windows, предоставляющий услуги переноса файлов и папок при помощи операций перетаскивания.

    Первым шагом на пути создания интерфейса перетаскивания должна стать настройка свойства

    property DragKind: TDragKind;
    docshapegroup484

    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


    События

    Инициатор

    Описание

    OnStartDrag()

    Элемент- источник

    Над элементом-источником нажата кнопка мыши и начато движение с удержанием кнопки в нажатом состоянии

    OnDragOver()

    Элемент- приемник

    Перетаскиваемый элемент находится над приемником

    OnDragDroup()

    Элемент- приемник

    Над элементом-приемником отпущена кнопка мыши

    OnEndDrag()

    Элемент- источник

    Сигнализирует о завершении перетаскивания, используется для освобождения используемых ресурсов, отмены операции и т. п.


    В момент начала перетягивания генерируется событие

    property OnStartDrag: TStartDragEvent;

    type TStartDragEvent = procedure(Sender: TObject;

    var DragObject: TDragObject) of object;

    В программах Delphi обработчик события OnStartDrag() задействуется только при необходимости, например для инициализации переменных, вызова дополнительных процедур и
    docshapegroup486

    функций. Необязательный формальный параметр 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()


    Параметр

    Возможные значения

    Описание

    Sender

    Любой потомок класса

    TObject

    Ссылка на приемник

    Source

    Ссылка на источник

    X, Y

    integer

    Координаты указателя над приемником

    State

    dsDragEnter

    Указатель появился над приемником




    dsDragLeave

    Указатель убран с поверхности приемника




    dsDragMove

    Указатель движется над приемником

    Accept

    Boolean

    Результат решения на прием клиента:

    • true готовность к приему клиента;

    • false отказ от приема


    Задачей программиста является информирование приложения (через параметр 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;

    В рамках обработчика события допускается освободить захваченные ранее ресурсы или выполнить какие-то другие действия, определяемые программистом.

    1   ...   18   19   20   21   22   23   24   25   26


    написать администратору сайта