270______________________________________________Глава 4

void _fastcall TFormI::FormDragDrop(TObject *Sender, TObject *Source,
int X, int Y)

Этот обработчик позволяет разместить клиента Source тем или иным образом
в зависимости от его имени, типа, местоположения — координат Х и Y. Например,
в этот момент можно что-то изменить в надписях приемника, сигнализируя поль-
зователя о приеме клиента и числе клиентов.

Событие, возникающее в компоненте-приемнике в момент, когда пользователь
перетаскивает клиента из приемника — OnUnDock. Заголовок соответствующего
обработчика имеет вид:

void   fastcall TFormI::FormOnDock(TObject *Sender,

TControl *Client, TWinControl *NewTarget, bool SAllow)

В обработчик передаются как параметры Client — компонент, который был
клиентом, NewTarget — новый приемник, в который пользователь перетаскивает
клиента, и Allow — параметр, определяющий, можно ли перетащить клиента. На-
пример, если в вашем тестовом приложении вы поместите в обработчик события
OnUnDock панели Panell оператор:

Allow = Client != Panel2;

то, выполняя приложение, обнаружите, что Panel2, попав клиентом в Panell, уже
не может оттуда выбраться, так как ей это запрещено.

Теперь, когда мы познакомились с основными возможностями технологии
Drag&Doc, давайте построим что-нибудь более полезное, чем просто игра панеля-
ми. Но сначала сохраните ваше тестовое приложение, поскольку оно еще нам по-
требуется.

Давайте построим многооконный редактор текстов, имеющий хранилище, в
которое можно помещать документы на хранение и затем извлекать из него нуж-
ные документы.

Начните новый проект и выполните следующие пункты.

1. Назовите форму (свойство Name) Fmain.

2. Разместите на форме компонент MainMenu и задайте в нем всего один пункт
— Новый, подразумевая под этим создание нового документа.

3. Поместите на форму панель, задайте ее свойство Caption равным Хранилище
документов и задайте Align = аГГор.

4. Поместите на форму компонент PageControl и задайте Align = alClient, чтобы
он занимал вся площадь окна, кроме полосы, занятой панелью Хранилище до-
кументов (рис. 4.15 а). Задайте в нем свойство DockSite равным true. Этот ком-
понент будет служить приемником документов.

6. Добавьте в проект еще одну форму, выполнив команду File New Form. Назови-
те ее FDoc (свойство Name). Задайте ее свойство Visible равным true. Устано-
вите ее свойство DragKind равным dkDock, а свойство DragMode равным
dmAutomatic. Эта форма будет служить клиентом компонента TPageControl
на форме Fmain.

7. Поместите на форму FDoc компонент Memo, задав для него Align = alClient,
чтобы он занял всю форму (рис. 4.15 б). Сотрите в нем текст (свойство Lines).

8. Выполните команду Proj ect Options... и перенесите в окне Forms форму FDoc из
окна Auto-create forms в окно Available forms, поскольку она должна создавать-
ся не автоматически, а при выборе пользователем раздела меню Новый (о
смысле этой операции см. раздел 4.7.2).

9. Сохраните проект, назвав модуль с первой формой Umain, а со второй —
UDoc.