Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

И. Н. Паламарь

Министерство образования и науки Российской Федерации

Рыбинский государственный авиационный технологический университет имени П. А. Соловьева

Кафедра Вычислительные системы

И. Н. Паламарь

Разработка интерфейса Drag & Dock приложения Windows

 

Методические указания к выполнению лабораторной работы

 

Рыбинск 2012

 

1. Общие сведения об интерфейсе Drag & Dock

Технология Drag & Dock обеспечивает возможность динамического перемещения при помощи мыши элементов управления (TControl) в доки (элементы парковки). В качестве носителей элементов управления выступают элементы, являющиеся потомками класса TWinControl. Использование интерфейса Drag & Dock возможно только для элементов в рамках одного приложения.

Технология Drag & Dock позволяется объединять на экране различные инструменты, например, такие как Инспектор объектов и Менеджер проекта в визуальных средах программирования. Можно настраивать панели инструментов путем их слияния или организации плавающих панелей в MS Word, как показано на рисунке 1.

 

 

Рисунок 1 – Вид плавающих панелей в MS Word

 

Возможны два варианта реализации техники Drag & Dock: автоматический и ручной. Для использования автоматического режима в Инспекторе объектов для выбранного элемента управления нужно установить значение свойства DragKind в dkDock, а свойства DragMode – в dmAutomatic. Остальную реализацию механизма парковки предоставляет код VCL.

Носителем других компонентов может служить потомок TWinControl. У него есть свойство DockSite, установка значения True которого разрешает перенос на него других компонентов. Если при этом еще и установить значение свойства AutoSize равным True, док будет автоматически масштабироваться в зависимости от того, что на нем находится.

Между доком и содержащимися на нем элементами управления есть двухсторонняя связь. Все припаркованные элементы управления содержатся в векторном свойстве Dockclients, а их количество можно узнать из свойства DockClientCount.

С другой стороны, если элемент управления находится на доке, то ссылка на док находится в свойстве HostDocksite. С ее помощью можно установить, где находится элемент, и даже поменять свойства дока.

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

Каждый переносимый элемент управления имеет два события, возникающие в моменты начала и конца переноса:

type TStartDockEvent = procedure(Sender: TObject; var DragObject: TDrag-DockObject) of object;

TEndDraqEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;

В первом из методов Sender – это переносимый объект, а DragObject – специальный объект, создаваемый на время процесса переноса и содержащий его свойства. Во втором Sender это также переносимый объект, a Target –объект-док.

Док тоже извещается о событиях во время переноса:

Type

TGetSiteInfoEvent= procedure (Sender: TObject; DockClient: TControl;

var influenceRect: TRect; MousePos: TPoint; var CanDock: Boolean) of object;

TDockOverEvent = procedure (Sender: TObject; Source: TDragDockObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;

TDockDropEvent = procedure(Sender: TObject; Source: TDragDockObject; X, Y: Integer) of object;

TUnDockEvent = procedure(Sender: TObject; Client: TControl; NewTarget:

TWinControl; var Allow: Boolean) of object;

Как только пользователь нажал кнопку мыши над переносимым компонентом и начал сдвигать его с места,всем потенциальным докам (компонентам, значение свойства которыхDocksite установлено равным True) рассылается событие onGetsiteinfo. С ним передаются параметры: кто хочет "причалить " (параметр Dockciient) и где (Mousepos). В ответ док должен сообщить решение, принимает он компонент(параметр canDock) и предоставляемый прямоугольник (influenceRect) или нет. При помощи этого события можно принимать только определенные элементы управления,как показано в примере:

procedure TFonnl.PanellGetSiteInfо(Sender: TObject; DockClient: TControl;

var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);

begin if DockClient is TBitBtn then CanDock:= False;

end;

Два последующих события в точности соответствуют своим аналогам из механизма перетаскивания (Drag-and-Drop). Событие OnDockOver происходит при перемещении перетаскиваемого компонента над доком, onDockDrop - в момент его отпускания. Наконец, onUnDock сигнализирует об уходе компонента с дока и происходит в момент его "причаливания" в другом месте.


Дата добавления: 2015-08-09; просмотров: 78 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Виды ГРП| Методические указания по разработке проекта

mybiblioteka.su - 2015-2024 год. (0.006 сек.)