Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Технология drag and dock

Данная технология реализует динамическое перетаскивание мышью и прицепление одного объекта к другому. В данном механизме участвуют два элемента: один – док (docking site) – может принимать объекты, другой – клиент (dockable control) – присоединяемый компонент. Delphi наделяет данной технологией потомков классов TWinControl и TControl. Класс объекта, играющий роль дока, должен быть производным от класса TWinControl, а класс стыкуемого объекта – от Tcontrol (или TWinControl).

Если рассматривать свойства компонентов, то доком может быть любой объект, обладающий свойством DockSite типа Boolean. Объекты-доки должны быть способны выступать по отношению к другим объектам в качестве контейнеров. Что касается стыкуемых элементов, то подходящие для них компоненты должны иметь два свойства DragKind и DragMode. Как и в случае с технологией перетаскивания Drag and Drop возможны два варианта реализации механизма Drag and Dock, задаваемые в свойстве DragMode: dmManual и dmAutomatic. В свойстве DragKind необходимо задать dkDock.

Иногда в данной технологии бывает полезным свойство AutoSize. Когда оба свойства дока DockSite и AutoSize имеют значение true, док (если это не форма) во время выполнения программы не виден до тех пор, пока к нему не будет пристыкован хотя бы один клиент. Таким поведением часто наделяются компоненты TPanel, которые в этом случае имеют нулевое значение для одного из измерений (высоты или ширины).

Программист для управления данной технологией может воспользоваться рядом обработчиков событий. Реакцию клиента на события, возникающие в моменты начала и конца переноса, можно задавать в обработчиках OnStartDock и OnEndDock. Во время переноса можно управлять процессом с помощью следующего ряда подключаемых к доку обработчиков: OnGetSiteInfo, OnDockOver, OnDockDrop, OnUnDock. Событие OnGetSiteInfo используется для некоторых компонентов, например, для TPanel. Данное событие в самом начале процесса перетаскивания рассылает сообщения и параметры клиента всем потенциальным докам (у которых свойство DockSite установлено в true) В ответ док должен сообщить решение о приеме клиента и предоставить прямоугольник приема в случае положительного варианта. Два события OnDockOver и OnDockDrop в точности соответствуют своим аналогам из технологии Drag and Drop. В обработчике OnUnDock можно запрограммировать некоторые действия в момент покидания дока и “приземления” клиента в другом месте.

Следует отметить, что реализация технологии Drag and Dock намного сложнее, чем реализация Drag and Drop. В частности, перед стыковкой необходимо вычислять возможный прямоугольник приема. В модуле uDockForm приводится такая функция (ComputeDockingRect). Кроме того, в некоторых сложных вариантах при установке у дока свойства UseDockManager в true возможно использование менеджера контроля докинга (свойство DockManager), с помощью которого определяется прямоугольник BoundsRect как быстрый способ получения контроля клиента на доке. Данный менеджер реализует интерфейс IDockManager, имеющий множество возможностей настройки поведения дока. Пристыкованный элемент может быть перемещен в другую позицию при помощи методов ManualDock, ManualFloat, Dock или можно воспользоваться (для некоторых типов клиентов) свойством FloatingDockSiteClass, устанавливая его значение в CustomDockForm.