Създаване на MDI приложение - Програмиране от

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

Обикновено MDI приложенията се състоят от поне две форми, родителска форма и дъщерна форма. Свойството FormStyle на родителския формуляр е зададено на fsMDIForm. За дъщерната форма задайте стила fsMDIChild.

Родителският формуляр служи като контейнер, съдържащ дъщерни формуляри, които са обвити в клиентска област и могат да бъдат премествани, преоразмерени, минимизирани или максимизирани. Вашето приложение може да има различни типове дъщерни форми, като например една за обработка на изображения и друга за обработка на текст.

В MDI приложение обикновено трябва да изведете множество екземпляри на класове формуляри. Тъй като всяка форма е обект, тя трябва да бъде създадена преди употреба и освободена, когато вече не е необходима. Delphi може да направи това автоматично или може да ви позволи да свършите работата.

Автоматично генериране на формуляр

По подразбиране, когато дадено приложение стартира, Delphi автоматично създава по един екземпляр от всеки клас формуляр в проекта и ги освобождава, когато програмата приключи. Автоматичното генериране се управлява от генериран от Delphi код на три места.

Първият е интерфейсният раздел във файла на модула на формуляра.

Този кодов фрагмент декларира класа TForm1.

Вторият е мястото, където се декларира променливата на класа.

Променливата Form1 е описана тук, сочеща към екземпляр на класа TForm1 и достъпна от всеки модул. Обикновено се използва, докато програмата работи къмконтрол на формата.

Трето място е в източника на проекта, който може да бъде достъпен чрез менюто Изглед/Изходен код на проекта. Този код изглежда така:

Процесът на изтриване на формуляри се управлява от концепцията за собствениците на обекти: когато даден обект бъде унищожен, всички обекти, които притежава, се унищожават автоматично. Формулярът, създаден по този начин, принадлежи към обекта Application и се унищожава, когато приложението се затвори.

Създаване на динамична форма

Въпреки че автоматичното генериране на формуляри е полезно при разработване на SDI приложения, то обикновено не е приемливо при създаване на MDI приложение.

За да създадете нов екземпляр на формуляр, използвайте конструктора Create на класа на формуляр. Кодът по-долу създава нов екземпляр на TForm1 по време на изпълнение и задава свойството Caption на „Нов формуляр“.

Конструкторът Create получава от вас като параметър потомък на TComponent, който ще бъде собственик на вашата форма. Обикновено приложението е собственик, така че всички формуляри се затварят автоматично, когато приложението приключи. Можете също така да подадете параметър Nil, за да създадете формуляр без собственик (или самостоятелен собственик, което предпочитате), но след това от вас зависи да го затворите и унищожите. В случай на необработена грешка, такава форма ще остане в паметта, което не показва високия професионализъм на програмиста.

В кода по-долу Form1 сочи само към последния създаден формуляр. Ако не ви харесва, използвайте кода по-долу - може да е по-специфичен за вашите нужди:

Съвет:Когато разработвате MDI приложение, методът Show не е необходим, тъй като Delphi автоматично показва всички новосъздадени дъщерни MDI форми. В случай на SDIприложение, трябва да използвате метода Show.

Дори и да създавате формуляри динамично, Delphi ще се опита да ви принуди да създадете екземпляр на всеки формуляр. За да се откажете от тях, използвайте диалоговия прозорец Опции на проекта, показан на фиг. 1.14 и премахнете класовете на формуляри от списъка за автоматично създаване на формуляри.

формуляр
Фиг. 1.14. Диалоговият прозорец Опции на проекта ви позволява да зададете опции за текущия проект

Ако искате да получите достъп до едно дъщерно копие на клас, използвайте свойството MDIChildren, описано в следващия раздел.