Интерфейс присоединения Drag-and-Dock
Если вы хотите, чтобы ваша плавающая панель инструментов выглядела по – особенному, нужно породить потомка от класса TCustomDockForm и связать свойство FloatingDockSiteCiass с этим порожденным классом:
TMyCustomFloatingForm = class(TCustomDockForm) public constructor Create(AOwner: TComponent); override; end; constructor TMyCustomFloatingForm.Create(AOwner: TComponent}; begin inherited Create(AOwner); BorderStyle: = bsNone; end; procedure TForml.FormCreate(Sender: TObject); begin ToolBarl.FioatingDockSiteCiass: = TMyCustomFloatingForm; end;
В этом примере решена типовая задача – сделать так, чтобы несущее окно плавающей панели инструментов не содержало заголовка. Внешний вид таких панелей приведен на рис. 27.3.
Переносить компоненты можно не только с помощью мыши, но и программно. Для этого есть пара методов ManualDock и ManualFioat. В приводимом ниже примере нажатие кнопки с именем BitBtn1 переносит форму custForm на док MainForm.Paneil и размещает ее по всей доступной площади (параметр выравнивания alclient). Нажатие кнопки BitBtn2 снимает эту форму с дока и выравнивает ее по центру экрана. В свойствах UndockHeight и undockwidth хранятся высота и ширина элемента управления на момент, предшествующий помещению на док:
procedure TMainForm.BitBtnlClick(Sender: TObject); begin GustForm.ManualDock (MainForm.Pane11,nil,alClient); end; procedure TMainForm.BitBtn2Click(Sender: TObject); begin with CustForm do begin ManualFloat(Rect((Screen.Width-UndockWidth) div 2, (Screen.Height-UndockHeight) div 2, (Screen.Width+UndockWidth) div 2, (Screen.Height+UndockHeight) div 2)); end;
Рис. 27.3. Плавающие панели инструментов без заголовка окна
Полное рассмотрение внутреннего устройства механизмов Drag-and-Dock потребовало бы расширения объема этой главы. Тем, кто хочет использовать их на все 100%, рекомендуем обратиться к свойствам useDockManager и DockManager. Последнее представляет собой СОМ-интерфейс, позволяющий расширить возможности дока, вплоть до записи его состояния в поток (классTStream).