Розробка MDI додатків у Delphi (вихідники, документація) - Програмні продукти

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для створення дочірніх вікон у нашому додатку використовуватиметься пункт меню "New child". Друге меню (Window) буде використовуватися для вирівнювання дочірніх вікон усередині батьківського вікна-форми.

. Створити та відобразити У висновку нам необхідно зробити обробник для пункту меню "New child". При натисканні на пункт меню File / New Child нашої програми, буде викликатися процедура NewChild1Click яка в свою чергу буде викликати процедуру CreateChildForm (наведену вище), для створення (наступного) екземпляра форми frChild.

Щойно створена дочірня форма матиме заголовок у вигляді "Child x", де x представляє кількість дочірніх форм усередині MDI форми, як описано нижче.

Закрити все Під час роботи з програмою, що має багатодокументний інтерфейс, завжди необхідно мати процедуру, що закриває всі дочірні вікна.

Вам доведеться виконувати перевірку щодо наявності незбереженої інформації в кожному дочірньому вікні. Для вирішення цього завдання найкраще використовувати обробник події OnCloseQuery.

ВластивостіMdiChildCount і MDIChildren MdiChildCount властивість read only, що містить у собі кількість створених дочірніх вікон. Якщо створено жодне дочірнє вікно, це властивість встановлено в 0. Нам доведеться часто використовувати MdiChildCount поруч із масивом MDIChildren . Масив MDIChildren містить посилання на об'єкти TForm всіх дочірніх вікон.

Зверніть увагу, що MDIChildCount першого створеного дочірнього вікна дорівнює 1.

Меню Window Delphi забезпечує більшість команд, які можна помістити всередині пункту меню Window. Далі наведено приклад виклику трьох основних методів для команд, які ми помістили до нашого додатку: