На формите - Делфи

Известно е, че в приложения, написани в Делфи, ако двата вида форми - създават автоматично (AutoCreate форма) и създадени на ръка. По подразбиране, ако, разбира се, не сте се изкачи в настройките за създаване на форма от първия тип. Помислете за предимствата форми на първи и втори тип. Пример за използване, вижте прикачения архива в директорията на проекта.

За да се формира този тип Delphi вмъква типа линия на файла на проекта: Този метод за създаване на форма, плюс малко код, който проверява дали тази форма на първична (като в този случай тя се показва) или не.

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

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

Когато стотици форми започва да се дразни - програмата се отваря с голямо закъснение (понякога продължава разказът на минута). Основна форма се показва само, когато са създадени всички форми. И започва да пристанище код, за да OnShow (Това събитие се случва, когато един вид се показва на екрана), но тъй като формата може да изчезне и се появи отново, след което променливите се въвеждат допълнителни флагове. Като цяло staot код просто непосилни. И проекта "завои".

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

Форми създадена ръчно

Противниците Delphi развеселиш - тук тя е за малки проекти и Delphi може да се побере, но и за сериозното - не. Решението на проблема е просто. Първо трябва да се отговори на въпроса: "Защо се създаде форма, която няма да се показва". Например, под формата на "Информация". Аз съм повече от сигурен, че във всяка сесия работа с потребителите на програмата не го отворите. Но за много хора искали да се сложи хубав голям снимки, различни специални ефекти.

Нека да пиша повече оптимален код за вид прозорец "Информация".

Първото нещо, което да се направи свободна форма (превод на наличност форма на Delphi). Това може да стане по два начина. Можете просто да отворите прозореца за настройки на проекта в раздела Forms (меню Project - Options). Там ще видите два списъка. Право е вероятно да бъде празен - че има свободни форми. И в ляво се генерират автоматично. Кликнете два пъти върху мишката върху името на нашия формуляр, който вероятно ще се нарича AboutForm (Трябва да изглежда Form23 или нещо в този вид? Спешни промени името, така че не може да живее, защото училището не се отнася за ученик на учениците 3 "," студент 15 "?). Тя се премества в списъка вдясно.

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

1. Добавете публично-част техника мухъл, това е така: 2. Натиснете Ctrl + Shift + C манипулатор се попълни.

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

В нашия случай, формата трябва да е "ОК", но да пиша за нея манипулатор с един ред Затвори някак си грозен. Но има и една красива решение - разположен в имоти бутон ModalResult равно mrOk. Сега модална форма ще се затвори.

Нека просто разширим нашата форма "За". Добавете възможност за промяна на надписа на този формуляр (за мен това ще бъде един етикет, съдържащ името на продукта). За тази цел, нашия метод добавя параметъра. Като цяло, това ще изглежда някъде така: и, съответно, на предизвикателството: Красотата на този метод е, че ако сте решили да се покаже името на продукта не е в етикета и върху компонента препълнена, просто са изтеглили, не е нужно да лопата на целия проект в търсенето на всички повиквания форма. И ако се работи в екип, а след това на колегите си, няма да трябва да бъдат обяснителните "драсканица" как, къде и какво трябва да се коригира.

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

Направи такава BP обикновено проста форма. На първо място, ние го правим безплатно. Ние вече са преминали малко по-високо. Следващото нещо, което пренапише ред като: за следното: Под линия добавите този: В тези редове ние проверяваме дали формата е създаден, той се връща препратка към него. Ако не - да се създадат.

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

Но тази форма, също има един недостатък. Ако някъде в деструктора ще се нарича, а след това ще бъдат последствията жалки, ако искате да видите формата отново. Но за да го оправи, добавете достатъчно OnDestroy събитие само един ред - privateForm: = нула;

Също така, тази форма може да бъде обучен да се обадя автоматично деструктор, когато го затворите. За да направите това, в случай OnClose вмъкнете ред за действие: = caFree;

Можете да замените caFree на caHide - това е често срещана форма на поведение - просто да избяга.

Има и caMinimize - формуляр, ще бъдат изтеглени от употреба, но не да се крият. И последният вариант - Canone. Той просто прави "не правят нищо". Тази опция е много полезна, когато постави на формата и данните, преди да затворите формата, които искате да ги проверите. Проверете в този случай, и ако това не се харесва - просто да не използвате повече и формата не е затворен. Но аз ви съветваме да не се прекалява, а след това под формата не може да се затвори най-малко. Правилният код ще изглежда някъде по този начин: действия Група

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

Но Delphi ни предоставя удобен инструмент. Тя води на собствения си списък на всички отворени форми. Достъпът до този масив да се получи лесно. Броят на откритите форми - Screen.FormCount. Вижте специфична форма - Screen.Forms [INDEX]. Помислете за един конкретен пример - за затваряне на всички формуляри за кандидатстване, в допълнение към основната. Ако се вгледате внимателно, няма нищо необичайно в този кодекс не са. Малко римейк този код, можете да се промени например заглавията на всички форми.

Да отидем малко по-нататък. Бих искал да се отнасят до определена форма на метода. Оказва се, че това може да стане, без да знае вида на формата, което трябва да знаете само името на метода, както и броя на параметри. Приложено ще намерите пример (директория AllForm) е, както и всички форми изпълняват метод име. Самият код се поставя в отделна единица и може да се използва във всяко приложение. Има само две ограничения:

- метод obyavlen трябва да бъдат публикувани в секцията (без това по никакъв начин); - вид и брой параметри трябва да се знае. В примера метод се извиква без параметри.

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

Това е, на добър час!