Розробка MDI додатків в Delphi (исходники

Що таке MDI?
MDI розшифровується як multiple document interface (Багатодокументний інтерфейс). У додатках з MDI в основному (батьківському) вікні можна окрить більше одного дочірнього вікна. Дана можливість звичайно використовується в електронних таблицях або текстових редакторах.


Кожне MDI програма має три основні складові:
Одну (і тільки одну) батьківську форму MDI, Одну і більш (зазвичай більше) дочірніх форм MDI, і основне меню MDI.

MDI "мати"
Як вже згадувалося, в проекті MDI додатку може бути присутнім тільки один MDI контейнер (батьківська форма) і він повинен бути стартовою формою.
Для створення основного вікна MDI програми виконайте наступні кроки:



  1. Запустіть Delphi і виберіть File / New Application … Delphi створить новий проект з однією формою під назвою form1 (за замовчуванням).

  2. У властивості Name надайте формі ім'я frMain.

  3. Встановіть властивість FormStyle в fsMDIform.

  4. Збережіть цей проект (ім'я проекту на Ваш розсуд, наприклад prMDIExample), разом з uMain.pas у щойно створеної директорії.

Як Ви встигли помітити, для створення основної форми MDI, ми встановили властивість FormStyle в fsMDIform. У кожному додатку тільки одна форма може мати властивість fsMDIform.

MDI "діти"
Кожне батьківське вікно MDI потребує принаймні в одній дочірньої формі. Дочірні форми MDI – це прості форми, за винятком того, що їх видима частина обмежена розмірами батьківського вікна. Так само при мінімізації такого вікна, воно поміщається не в панель завдань, а залишається всередині батьківського вікна (на панель завдань потрапить тільки батьківське вікно).

Тепер давайте створимо додаткові форми, а точніше дочірні. Просто виберіть File / New Form. Буде створений новий об'єкт форми з ім'ям form1 (за замовчуванням). За допомогою Object Inspector змініть властивість Name у формі form1 на frChild, а властивість FormStyle на fsMDIChild. Збережіть цю форму з відповідним їй файлом як uchild.pas. Зверніть увагу, що за допомогою даного властивості ми можемо перетворити будь-яку існуючу форму в дочірню форму MDI.
Ваша програма може включати безліч дочірніх MDI форм такого ж або іншого типу.

Так само хочеться звернути Вашу увагу, що MDI додаток може включати в себе і самі звичайні форми, але на відміну від дочірніх, вони будуть відображатися як звичайні модальні діалогові вікна (такі як about box, або файловий діалог).

Естевственно, що як на батьківському, так і на дочірньому вікнах можна розташовувати будь-які елементи керування, проте вже давно склалася традиція, що на батьківській формі розташовується панель статусу (status bar) і панель інструментів (toolbar), в той час як на дочірніх формах розташовуються всі інші контроли, такі як гріди, картинки, поля вводь і т. д.

Автосоданіе -> Доступні
Тепер давайте зробимо деякі налаштування нашого проекту. Виберіть Project / Options, відкриється діалог опцій проекту (Project Options). У лівій панелі виберіть frChild (Авто-створення форм ("Auto-create forms ")), і перемістіть її в праву панель (Доступні форми (Available forms)). Список правої панелі містить ті форми, які використовуються Вашим додатком, але які не створені автоматично. У MDI додатку, за замовчуванням, всі дочірні форми створюються автоматично і відображаються в батьківській формі.

Створення та відображення …
Як згадано вище, настройка не дозволяє автоматично створювати дочірні вікна, тому нам необхідно додати певний код, який буде виробляти створення об'єкта форми frChild. Наступну функцію CreateChildForm необхідно помістити всередині основної форми (MDI батько) (поряд із заголовком в interface "s private):




uses uchild;

procedure TfrMain.CreateChildForm
(const childName : string);
var Child: TfrChild;
begin
Child := TfrChild.Create(Application);
Child.Caption := childName;
end;

Даний код створює одну дочірню форму з заголовком childName.
Не забудьте, що цей код знаходиться розділі "uses uchild".

На закриття не мінімізувати!
Закриття дочірнього вікна в MDI додатку всього навсього мінімізує його в клієнтській області батьківського вікна. Тому ми повинні забезпечити процедуру OnClose, і встановити параметр Action в caFree :




procedure TfrChild.FormClose
(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

Зверніть увагу, що якщо форма є дочірньою формою MDI, і її властивість BorderIcons встановлено в biMinimize (за замовчуванням), то знову ж за замовчуванням параметр Action встановлений в caMinimize. Якщо ж у дочірньої формі MDI немає цих установок, то за замовчуванням Action встановлений як caNone, що означає, що при закритті форми нічого не станеться.

MDI батьківське меню
Кожне MDI додаток повинен мати основне меню з (якщо більше нічого немає), опцією вирівнювання вікон. Оскільки ми попередньо перемістили дочірню форму з Авто-створюваних (Auto-create) у Доступні (Available) форми, то нам потрібен буде код, який (пункт меню) буде створювати дочірні форми.

Отже, перемістіть компонент TMainMenu на frMain (MDI батько) і приведіть його до наступного вигляду:

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*