Sign in Join
Wiki copytemporary

Anchor Docking Step by step example/ru

English · Русский

Anchor Docking : Пошаговый пример

Warning: ЭТОТ ПРИМЕР РАБОТАЕТ НЕ НА 100%, КАК БЫЛО ЗАДУМАНО. См. раздел Отладка для получения дополнительной информации.

У нас теперь есть мануал по anchor docking ... но я знаю, что люди учатся на методом тыка, а не посредством чтения ... итак, давайте делать это.

Сначала я создам новое приложение с нуля, а затем (надеюсь) мы увидим, сможем ли мы "преобразовать" в него существующее приложение (которое работало по старому способу выравнивания "Panel").

Для первого проекта я создам приложение, которое должно выглядеть так:

 +-----------------------------+
 | Main menu                   |
 +-----------------------------+
 | Toolbar (open, save etc.)   |
 +-----+-----------------------+
 | __= |                       |
 |     |                       |
 |  T  |   Main Application    |
 |  o  |                       | 
 |  o  |                       |
 |  l  +-----------------------+
 |  s  |   Output Messages     |
 +-----+-----------------------+

С панелью инструментов (Toolbar), инструментами (Tools) (несколько страниц), «Вывода сообщений» ( Output Messages) все части становятся «пристыковываемыми» (dockable). Поскольку механизм "drag-and-drop" еще не реализован, я не собираюсь пытаться добавить функциональность для перемещения частей. (Компиляция примера показывает, как это можно сделать) ... Этот проект будет лишь демонстрировать состояние «закреплено» или «не закреплено» для каждой из этих частей. (Этот проект может быть выполнен только с панелями.)

Шаг 1: Создание главной страницы

По сути, мы просто создадим новую форму, добавим в форму главное меню, а затем добавим в форму dockmanager. Я также добавляю stringgrid, чтобы показать, как она будет выглядеть.

Шаг 2: Создание своей панели инструментов

Я не собираюсь притворяться, что знаю, как создать правильную панель инструментов ... аля excel или что-то в стиле Офиса (прим.перев.: очевидно, имеется ввиду M$Office). Поэтому я просто создам форму со speedbutton'ами, которые выровнены по левому краю, и добавлю к ней несколько значков. Также добавьте к нему элемент управления док-станцией.

pascal
     ControlDocker1:=TLazControlDocker.Create(Self);
     ControlDocker1.Name:='ToolbarForm';
     ControlDocker1.Manager:=Form1.DockingManager;

Шаг 3: Наши страницы инструментов

Мы просто создадим 2 разные формы, которые узнаваемо отличаются друг от друга. И добавьте к нему элемент управления док-станцией. Сделайте следующее дважды:

pascal
 
     ControlDocker1:=TLazControlDocker.Create(Self);
     ControlDocker1.Name:='Toolwindow1Form';  // (или 2 для второго)
     ControlDocker1.Manager:=Form1.DockingManager;

Шаг 4: Наше Окно Сообщений

Просто наша последняя форма ... Форма вывода. Выполните те же действия, что и раньше ...

pascal
     ControlDocker1:=TLazControlDocker.Create(Self);
     ControlDocker1.Name:='OutputForm';  // (или 2 для второго)
     ControlDocker1.Manager:=Form1.DockingManager;

Шаг 5: Собираем все вместе

Теперь мы просто добавим все вместе в основную форму ... и посмотрим, что из этого получится.

pascal
procedure TForm1.FormActivate(Sender: TObject);
begin
  if initialized then exit;
  Initialized := true;
  // Устанавливаем панель инструментов вверху
  DockingManager.Manager.InsertControl(Form2,alTop,Form1);
  
  // Устанавливаем окно инструментов слева
  DockingManager.Manager.InsertControl(Form3,alLeft,Form1);
  
  // Устанавливаем второе окно инструментов ВНУТРИ первого
  DockingManager.Manager.InsertControl(Form4,alClient,Form3);
  
  // Устанавливаем второй элемент управления сообщениями снизу
  DockingManager.Manager.InsertControl(Form5,alBottom,Form1);
end;

Отладка

Это не сработало на 100%, как ожидалось.

Вещи, которые заработали, как ожидалось:

  1. Панель инструментов выглядела правильно и потрясающе
  2. Ширина окна инструмента была ожидаемой

Вещи, которые не сработали должным образом:

  1. Второе окно инструментов не работало должным образом, там был page control, но вторая страница не была назначена, а первой странице было назначено ВТОРОЕ окно инструментов
  2. Главное меню отсутствовало
  3. Memo исчезло ... хотя форма Form5 была там (может, нет? "title" не прочитан "Form5")
  4. Form5 занял все пространство, предназначенное для основного приложения. Возможно, исправит ситуацию добавление ограничений в главное окно.

From the Free Pascal wiki, page "Anchor Docking Step by step example/ru", as it stood on 2020-01-20 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.