Створення програми MDI - Програмування від

Термін MDI (Multiple Document Interface) дослівно означає багатодокументний інтерфейс і описує програми, здатні завантажити і використовувати одночасно кілька документів або об'єктів. Прикладом такої програми може бути диспетчер файлів (File Manager).

Про бичне MDI-додатки складаються мінімум із двох форм - батьківської та дочірньої. Властивість батьківської форми FormStyle встановлено рівним fsMDIForm. Для дочірньої форми встановіть стиль fsMDIChild.

Батьківська форма служить контейнером, що містить дочірні форми, які укладені в клієнтську область і можуть переміщатися, змінювати розміри, мінімізуватися або максимізуватися. У вашому додатку можуть бути дочірні форми різних типів, наприклад, одна - для обробки зображень, а інша - для роботи з текстом.

У MDI-додатку, як правило, потрібно виводити кілька екземплярів класів форми. Оскільки кожна форма є об'єктом, вона повинна бути створена перед використанням і звільнена, коли її більше не потребують. Delphi може робити це автоматично, а може надати цю роботу вам.

Автоматичне створення форм

За замовчуванням при запуску програми Delphi автоматично створює по одному примірнику кожного класу форм у проекті та звільняє їх при завершенні програми. Автоматичне створення обробляється генерованим Delphi кодом у трьох місцях.

Перше - розділ інтерфейсу у файлі модуля форми.

У даному фрагменті коду оголошується клас TForm1.

У другому є місце, в якому описується змінна класу.

Десь описана змінна Form1, що вказує на екземпляр класу TForm1 і доступна з будь-якого модуля. Зазвичай вона використовується під час роботи програми дляуправління формою.

Трете місце знаходиться у вихідному тексті проекту, доступ до якого можна отримати за допомогою меню View/Project Source. Цей код виглядає як:

Процес видалення форм обробляється за допомогою концепції власників об'єктів: коли об'єкт знищується, автоматично знищуються всі об'єкти, якими він володіє. Створена описаним чином форма належить об'єкту Application і знищується під час закриття програми.

Динамічне створення форм

Хотя автоматичне створення форм корисно при розробці SDI-додатків, при створенні MDI-додатку воно, як правило, неприйнятне.

Для створення нового екземпляра форми використовуйте конструктор Create класу форми. Наведений нижче код створює новий екземпляр TForm1 під час роботи програми та встановлює його властивість Caption рівним 'New Form'.

До онструктор Create отримує від вас як параметр нащадка TComponent, який і буде власником вашої форми. Зазвичай як власник виступає Application, щоб усі форми були автоматично закриті після закінчення роботи програми. Ви можете також передати параметр Nil, створивши форму без власника (або таку, що володіє собою - як вам більше подобається), але тоді закривати і знищувати її доведеться вам. У разі виникнення необроблюваної помилки така форма залишиться в пам'яті, що не говорить про високий професіоналізм програміста.

У наведеному нижче коді Form1 вказує лише на останню створену форму. Якщо вам це не подобається, скористайтеся наведеним нижче кодом - можливо, він більш точно відповідає вашим запитам:

Рада:При розробці MDI-програми метод Show не потрібен, тому що Delphi автоматично показує всі новостворені дочірні MDI-форми. У випадку SDI-програми ви повинні використовувати спосіб Show.

Навіть при динамічному створенні форм Delphi спробує нав'язати вам свої послуги зі створення екземпляра кожної форми. Щоб відмовитися від них, скористайтеся діалоговим вікном Project Options, зображеним на рис. 1.14, та видаліть класи форм зі списку Auto-create forms.

створення
Мал. 1.14. Діалогове вікно Project Options дозволяє встановити опції для поточного проекту

Якщо ви захочете отримати доступ до окремого дочірнього екземпляра класу, використовуйте властивість MDIChildren, що описується в наступному розділі.