Панель не имеет своих методов-обработчиков, т. к. работает в режиме dmAutomatic и не нуждается в дополнительной обработке завершения переноса.

Интерфейс присоединения Drag-and-Dock

Эта возможность появилась в Delphi 4. Она "подсмотрена" опять-таки у разработчиков из Microsoft, внедривших плавающие панели инструментов в MS Office, Internet Explorer и другие продукты (рис. 27.2).

Речь идет о том, что ряд элементов управления (а конкретно - потомки класса TWinControl) могут служить носителями (доками) для других элементов управления с возможностью их динамического перемещения из одного дока в другой при помощи мыши. Перетаскивать можно практически все - от статического текста до форм включительно. Пример использования техники Drag-and-Dock дает сама среда разработки Delphi - с ее помощью можно объединять на экране различные инструменты, такие как Инспектор объектов и Менеджер проекта.

Как и в случае с технологией перетаскивания Drag-and-Drop, возможны два варианта реализации техники Drag-and-Dock: автоматический и ручной. В первом случае дело сводится к установке нужных значений для нескольких свойств, а остальную часть работы берет на себя код VCL; во втором, как следует из названия, вся работа возлагается на программиста.

Итак, что же нужно сделать для внедрения Drag-and-Dock? В Инспекторе объектов необходимо изменить значение свойства DragKind на dkDock, а свойства DragMode - на dmAutomatic. Теперь этот элемент управления можно перетаскивать с одного носителя-дока на другой.

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

Программирование в Delphi 7

Рис. 27.2. Плавающие панели инструментов

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

type TStartI3ockEvent = procedure (Sender: TObject;
var EragObject: TCragDockObject) of object;
TEnoTragEvent = procedure(Sender, Target: TObject;
X, Y: Integer) of object;

В Первом ИЗ методов Sender - ЭТО переносимый объект, a EragObject - специальный объект, создаваемый на время процесса переноса и содержащий его свойства. Во втором sender - это также переносимый объект, a Target - объект-док.

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

type TGetSitelnfoEvent = procedure(Sender: TObject;
DockClient: TControl;
var InfluenceRect: TRect;
MousePos: TPoint;
var CanDock: Boolean) of object;
TDockOverEvent = procedure (Sender: TObject;
Source: TOragDockObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean) of object;
TIJocM^opEvent = procedure (Sender: TObject;
Source: TDragDockObject;
X, Y: Integer) of object;
TfJrtockEX/ent = procedure (Sender: TObject;
Client: TControl;
NewTarget: TMnControl;
var Allow: Boolean) of object;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс