Читайте также:
|
|
Работа выполняется на С++.
1) Начните новый проект. Присвойте свойству Name формы значение DockForm, а свойству Caption – Drag & Dock. На форме создадим набор элементов управления Windows, расположенных на перемещаемых панелях (CoolBands). Поместите на форму два экземпляра компонента TСoolBar со страницы Win 32, которые будут содержать панели инструментов. Чтобы вставить в панели CoolBar необходимые элементы управления, создадим две панели инструментов с помощью компонентов TToolBar. Установите их свойство ShowCaptions в true. Создайте у компонента ToolBar 1 две кнопки с заголовками Aqua и Red, а у компонента ToolBar 2 – две кнопки с заголовками Memo и Button.
Выберите на форме компонент CoolBar 1, через контекстное меню которого или через свойство Bands создайте новую панель типа TСoolBands. В свойстве Control данной панели установите значение ToolBar 1. Аналогично разместите панель инструментов ToolBar 2 на панели компонента CoolBar 2.
Значения свойства компонентов CoolBar 1 и CoolBar 2 AutoSize установите в true.
Поместите на форму третий экземпляр компонента TСoolBar, который будет служить контейнером для панелей инструментов. Создайте у него две панели, значения свойства Control которых установите соответственно в CoolBar 1 и CoolBar 2.
Запустите приложение на исполнение и попробуйте перетащить панели друг относительно друга.
2) Выберите компонент CoolBar 3 и установите его свойство DockSite в true. Таким образом он станет доком и сможет принимать паркуемые компоненты.
Определим панель CoolBar 1 в качестве паркуемого компонента. Установим ее свойство DragKind в значение dkDock, а DragMode – в dmAutomatic.
Запустите приложение. Теперь панель с кнопками Aqua и Red вытаскивается мышью за пределы формы и помещается обратно.
3) Создайте в проекте новую форму с именем Aqua и перенесите ее из списка Auto-create forms в список Available forms. Разместите на форме экземпляр компонента TPanel. Установите его свойства: DockSite – в true, DragKind – в dkDock, а DragMode – в dmAutomatic.
Расположите форму на экране таким образом, чтобы она при создании не перекрывала главную форму приложения.
Внесите в обработчик события OnClick кнопки Aqua следующий код:
inc (f);
Aqua:= T Aqua.Create (Self);
Aqua. Caption:= ' Aqua '+ IntToStr (f);
Aqua. Color:= clAqua;
Aqua. Show;
Переменную f для подсчета количества созданных форм объявите в разделе implementation модуля.
4) На главной форме модуля поместите два экземпляра компонента TGroupBox. Свойствам Caption которых присвойте соответственно Button и Memo. Они будут служить для привязки создаваемых компонентов с помощью соответствующих кнопок на панели инструментов.
В обработчики событий OnClick кнопок Button и Memo внесите соответственно следующий код:
procedure TForm1.ToolButton3Click(Sender: TObject);
var NewButton: TButton;
begin
NewButton:=TButton.Create(Self);
inc(b);
NewButton.DragKind:=dkDock;
NewButton.DragMode:=dmAutomatic;
NewButton.Caption:= 'DockButton '+IntToStr(b);
NewButton.Parent:=GroupBox1;
NewButton.Left:= 20;
NewButton.Top:=20;
NewButton.Show;
end;
procedure TForm1.ToolButton4Click(Sender: TObject);
var NewMemo: TMemo;
Begin
NewMemo:=TMemo.Create(Self);
inc(m);
NewMemo.DragKind:=dkDock;
NewMemo.DragMode:=dmAutomatic;
NewMemo.Color:= rgb(0,m*60+50,0);
NewMemo.Parent:=GroupBox2;
NewMemo.Left:= 20;
NewMemo.Top:=20;
NewMemo.Show;
end;
Переменные b и m объявите аналогично переменной f.
5) Разместите на форме DockForm экземпляр компонента TPageControl и установите его свойство DockSite в true.
Запустите приложение. Создайте окно Aqua, а затем, создавая экземпляры кнопки Button и поля Memo, перетаскивайте их на компонент Panel окна Aqua или на компонент PageControl. Выполните парковку компонента Panel.
Осуществите вывод информации о количестве припаркованных компонентов.
S: = ";
for i:= 0 to Panell.DockClientCount-1 do
AppendStrfs,Panel1.DockClients[i].Name+#$D#$A);
ShowMessage(s);
Для припаркованных компонентов также выведите соответствующую информацию.
Пример:
procedure TForm1.ButtonlEndDock(Sender, Target: TObject; X, Y: Integers);
begin
(Sender as TControl).HostDocksite.SetTextBuf(pChar((Sender as TControl).Name));
end;
6) Переносить компоненты можно не только с помощью мыши, но и программно. Для этого используются соответствующие методы.
а) Для программного размещения компонента в доке используется метод
function ManualDock (NewDockSite: TWinControl;
DropControl: TControl = nil; ControlSide: TAlign = alNone): Boolean;
Этот метод определен у компонентов класса TControl. Параметр NewDockSite определяет док, куда будет помещен компонент. DropControl – это компонент в доке, на который будет помещаться данный компонент (по умолчанию он отсутствует). Привязкой компонента к границам дока (по умолчанию – отсутствует) управляет параметр ControlSide.
Пример нажатие кнопки с именем BitBtnl переносит форму custForm на док MainForm. panell и размещает ее по всей доступной площади (параметр выравнивания alciient).
procedure TMainFom.BitBtnIClick (Sender: TObject);
begin CustForm.ManualDock(MainForm.Panell,nil,
alciient);
end;
б) метод ManualFloat снимает компонент с дока.
Пример Нажатие кнопки BitBtn2 снимает эту форму с дока и выравнивает ее по центру экрана. В свойствах UndockHeight и UndockWidth хранятся высота и ширина элемента управления на момент, предшествующий помещению на док:
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
with CustForm do begin ManualFloat(Rect((Screen.Width-UndockWidth) div 2,
(Screen.HeightUndockHeight) div 2, (Screen.Width+UndockWidth) div 2, (Screen.Height+UndockHeight) div 2));
end;
Создайте новую форму с именем Client с компонентом TMemo, которая будет использоваться в качестве клиентов при парковке в доке. Установите его свойства DragKind в dkDock и DragMode в dmAutomatic. Свойству Align присвойте значение alClient. Чтобы модифицировать свойства формы во время работы, создайте процедуру, изменяющую заголовок окна и текст, отображаемый компонентом TMemo:
procedure TClient. InitControls (Capt: String);
Begin
Caption:= capt;
Memo 1. Lines. Text:= capt;
end;
В данном случае форма Client – это компонент, который будет использован для парковки в доке. Поэтому у нее также нужно будет установить свойства DragKind в dkDock и DragMode в dmAutomatic.
7) В модуле формы Aqua объявите переменные
Var
View, Tree, Editor: TClient;
Установите свойство формы DockSite в true.
Разместите на форме Aqua экземпляр компонента TPageControl и установите его свойство DockSite в true.
8) Для того, чтобы при запуске программы клиенты поместились на форму в нужное место, напишите обработчик события OnCreate формы Aqua.
procedure TAqua. FormCreate (Sender: TObject);
Begin
View:= TClient. Create (Self);
View. InitControls ('Обзор');
Tree:=TClient.Create(Self);
Tree. InitControls ('Дерево');
Editor:=TClient.Create(Self);
Editor. InitControls ('Редактор');
// поместим PageControl в док
PageControl 1.BeginDrag(true); //переместим
PageControl 1.EndDrag(true); // бросим
PageControl 1.ManualDock(Self, nil, alTop);//поместим в док
// поместим клиентов в док
Editor. ManualDock(Self, nil, alLeft); // на форму слева
View. ManualDock(self.PageControl1); // на PageControl
Tree. ManualDock(self.PageControl1); // на PageControl
Editor. Show;
View. Show;
Tree. Show;
end;
Обработчик создает три экземпляра формы (TClient) для размещения в доке и инициалицирует свойства каждого экземпляра уникальными значениями. Затем компонент TPageControl размещается в доке формы. Во время работы это можно сделать, перетаскивая компонент с помощью мыши. При размещении клиентов в доке одна форма размещается на форме Aqua, а две – на компоненте TPageControl.
Запустите приложение на исполнение. Планируемый вид элементов управления не получен. Для того чтобы программно управлять операциями парковки необходимо использовать свойства UseDockManager и DockManager.
В нашем примере установите свойство UseDockManager формы Aqua в true.
Свойство DockManager представляет собой СОМ-интерфейс, позволяющий расширить возможности дока, вплоть до записи его состояния в поток (TStream).
Дата добавления: 2015-08-09; просмотров: 66 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
И. Н. Паламарь | | | Режиме в законтурной области пласта |