ПредишенСледващото

Откриване форми в модален режим

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

Като пример, да създадете нов проект, а основната форма ще постави няколко полета за въвеждане и бутони:

Статии - работа с форми Лазар - информационен портал за разработчиците да Free Pascal -

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

Статии - работа с форми Лазар - информационен портал за разработчиците да Free Pascal -

Като софтуерен интерфейс за параметъра предаване ще използва TestValue собственост, която е определена в публичния раздел на формуляра за клас. Ние идентифицират и прилагат повече от очевидни методи за създаване и четене на стойността на имота, както и манипулатор на събитие натискане на бутона, в която имотът е настроен да се образува ModalResult mrOK, което води до закриването на (но не унищожи!) Форма.

Въпреки това, най-голям интерес е RunTestForm на функция. Както можете да видите, то се определя извън формата на класа, въпреки че в същия модул. Може да изглежда странно за програмисти VB, където модула клас е напълно идентифицирани със самия клас. Както и в Делфи, поставени в Лазар не е така. Въпреки, че в една единица може да бъде определена само една форма (в противен случай визуална форма дизайнер няма да работи), другите елементи на молбата не са длъжни да прилагат поотделно. В нашия случай, RunTestForm функцията съдържа код, необходим за създаване на форма, прехвърлянето на първоначалната стойност на полето за въвеждане и да се върне на редактираната стойност. Очевидно е, че RunTestForm смисъла свързана с класа на формата, така че е разумно (макар и не задължително), поставете го във форма модул.

Сега нека видим как да се използва всичко това в основната си форма. Добави обработват събитие в натискане на бутона призовава функция RunTestForm, в резултат на раздела за изпълнение на основната форма на придобиваното модул следния вид:

Откриване форми в не-модален режим

Така че, за да започне да се дефинира какво предназначение, немодални форми на поведение и как да се справят с него съвсем различно. На първо място, немодални форми не са предназначени да се връщат стойности, тъй като след откриването им програма не се спира в очакване на затваряне на формата, и продължава да се изпълнява. Поради това, ако не се вземат специални мерки показалеца, за да отворите се губи след завършване на кода, който тя създава формата (в този случай - е функция RunTestForm). Ужасно е? В повечето случаи - не. Не забравяйте, че при създаването на форма например до Приложението на конструктор предавате параметри? Така че: Заявление - обект, който представлява съвкупност от всички нашата молба. С тази създаване на форма, той ще запомни присъствието й, и ние можем да се възползваме от него. Да се ​​създаде форма в основния списък, който ще бъде населена с форми на имена, които са отворени в заявлението. Основната форма с няколко промени и ще изглежда по следния начин:

Статии - работа с форми Лазар - информационен портал за разработчиците да Free Pascal -

Моля, имайте предвид, че ние сме обявен нов метод FillWindowsList, които просто служи за запълване на списъка на формуляри за кандидатстване. Изпълнението му не е твърде трудно:

Има някои интересни точки. Фактът, че обектът за кандидатстване съдържа един списък на всички компоненти, които са собственост, така че трябва да се провери, че друг компонент е точно TForm.

Въпреки това, какво добро е просто да се изброят на формите. Необходимо е да се направи това, за да бъде в състояние да преминете към всеки от тях. В реално приложение, то със сигурност е по-добре да се направи с менюто, но кодът ще бъде малко по-тромава, така че в този прост пример, в първия списък ще се използва, и второ пропусне необходимите проверки в реално приложение.

По-долу е целия код раздела на изпълнението на основната форма на модула. Имайте предвид, че се обадите на метод RunTestForm ние вече не сме в очакване на върнатата стойност, но се обадете на процедурата за попълване на списъка с прозорци за кандидатстване.

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

Имаше и нова променлива - брояч форми Form2Count. Това ще бъдат необходими при създаването на копие на формата, ние ще зададете име. Всички заявления трябва да имат уникални имена, но LCL тя не се грижи, така че трябва да действа независимо. Код, свързан с променлива Form2Count доста тривиално, така че спрете на него ние няма.

Изпълнението също е доста по-различно. Показване форми вече са направени, като се обадите Show, отколкото ShowModal, така че програмата не се прехвърля към новосъздадения формата преди да го затворите, и продължава. Закриването и освобождаването на ресурси вече трябва да се грижи за самата форма. За тази цел във формата на затваряне процедура събитие, присвояваме стойността на променливата CloseAction caFree. При натискане на бутона вече не призовава за определяне стойностите ModalResult, ясен призив към Close метод.

Ако не просто прочетете тази статия и е създал едновременно описана програмата за изпитване, че е време да го стартирате. Отново просто не забравяйте да премахнете допълнително под формата на списъка се създава автоматично, когато приложението се стартира.

Подкрепете проекта - споделете линка, благодаря!