|
Министерство образования и науки Российской Федерации
Рыбинский государственный авиационный технологический университет имени П. А. Соловьева
Кафедра Вычислительные системы
И. Н. Паламарь
Разработка интерфейса 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Виды ГРП | | | Методические указания по разработке проекта |