100 Delphi компонента - ApplicationEvents и приложение
Всяко приложение автоматично създава обектApplicationот типTApplication- приложението. Този компонент не е в палитрата на библиотеката, вероятно само защото винаги е сам в приложението.Приложениетоима редица свойства, методи, събития, които характеризират приложението като цяло.
Разгледайте първо някои свойства наПриложение. Булевото свойствоActive(само за четене) характеризира дейността на приложението. Това евярно, ако формулярът за кандидатстване има фокус. Ако потребителят е преминал към друго приложение, свойствотоActiveеfalse.
СвойствотоExeNameе низ, съдържащ името на изпълнимия файл с пълния път до него. Това свойство е полезно за определяне на директорията, от която се стартира приложението, която може да съдържа други файлове (настройки, документи, бази данни и т.н.), свързани с приложението. ИзразътExtractFilePath(Application.ExeName)дава тази директория. Обикновено свойствотоExeNameе идентично с функциятаParamStr(0), която връща нулев параметър на командния ред — име на файл с път.
СвойствотоTitleдефинира низа, който се появява до иконата на минимизираното приложение. Ако това свойство не се промени по време на изпълнение, тогава то е равно на опциятаЗаглавие, зададена по време на проектиране на страницата Приложение на прозореца с опции на проекта (команда Опции на проекта). Свойството може да се промени програмно, например чрез промяна на надписа в зависимост от режима на работа на приложението.
СвойствотоMainFormот типTFormдефинира основната форма на приложението. Булевото свойствоShowMainFormопределя дали главният формуляр трябва да бъде видим, когато приложението се стартира за изпълнение. По подразбиране е такаtrue, което прави основната форма видима при стартиране на приложението. Ако зададетеApplication.ShowMainFormв главния файл на проекта наfalseпреди да извикате методаApplication.Runи ако свойствотоVisibleна главния формуляр също еfalse, тогава основният формуляр ще бъде невидим в първия момент.
СвойствотоHelpFileуказва помощния файл, който приложението в момента използва като файл по подразбиране. Ако това свойство не се промени по време на изпълнение, тогава то е равно на опцията за помощен файл, зададена по време на проектиране на страницата Приложение на прозореца с опции на проекта (команда Опции на проекта). Свойството може да се промени програмно чрез присвояване на един или друг помощен файл в зависимост от режима на приложението.
Редица свойства на обектаПриложениедефинират подсказки за компонентите на приложението. СвойствотоHintсъдържа текста на подсказкатаHintза визуалния компонент или раздела на менюто, върху който в момента се движи курсорът на мишката. Това свойство се променя по време на събитиетоOnHint, което ще бъде обсъдено по-късно. По време на това събитие текстът на подсказката се прехвърля от свойствотоHintна компонента, към който е преместен курсорът на мишката, към свойствотоHintна обектаApplication. СвойствотоApplication.Hintможе да се използва за показване на този съвет или за задаване и показване на текст в лентата на състоянието, който описва текущия режим на приложението.
СвойствотоHintColorна типаTColorдефинира цвета на фона на прозореца на раздела. Цветът по подразбиране еclInfoBk, но стойността му може да бъде променена програмно. СвойствотоHintPauseопределя закъснението в милисекунди за появата на етикета след преместване на курсора на мишката до следващия компонент (отпо подразбиране е 500 милисекунди или половин секунда). СвойствотоHintHidePauseпо подобен начин дефинира интервала от време, след който разделът става невидим (по подразбиране е 2500 милисекунди, или две секунди и половина). СвойствотоHintShortPauseпо подобен начин дефинира забавянето преди появата на нов раздел, ако в момента е показан друг раздел (50 милисекунди по подразбиране). Това свойство помага за предотвратяване на досадното трептене, когато потребителят бързо движи курсора на мишката върху различни компоненти.
МетодътПрекратяванепрекратява приложението. Ако трябва да прекратите приложението от главната форма, тогава вместо методаApplication.Terminateможете да използвате методаCloseна главната форма. Но ако трябва да затворите приложението от някаква вторична форма, например от диалогов прозорец, тогава трябва да използвате методаApplication.Terminate.
МетодътМинимизиранеминимизира приложението, като поставя иконата му в лентата на задачите на Windows.
Редица методи са свързани с работата с помощни файлове. Вече споменахме свойствотоHelpFile, което указва текущия помощен файл. МетодHelpContext: Предизвиква преход към помощния файл за темата с IDContext. Това е идентификатор, свързан с тема при проектиране на помощ. МетодътHelpJump: прави същото нещо, но неговият параметърJumpIDне е идентификатор на тема, а името на съответната тема в помощния файл, посочен в него с #.
МетодHelpCommand: позволява ви да изпълните командата WinHelp API, посочена от параметъраCommandс параметъраData. Методът задейства събитиетоOnHelpна активния формуляр или приложение и след това изпълнява указаната команда WinHelp. За пълен списък на командите на WinHelp виеМожете да намерите помощния файлwin32.hlpв темата WinHelp, намираща се в . \Program Files\Common Files\Borland Shared\MSHelp . Представяме само някои от тях. КомандатаHELP_CONTENTSс параметър 0 показва прозореца Help Contents. КомандатаHELP_INDEXс параметър 0 показва прозореца на помощния индекс. КомандатаHELP_CONTEXTс параметър, равен на идентификатора на темата, показва темата с дадения идентификатор (това е идентично с методаHelpContext, обсъден по-рано). КомандатаHELP_CONTEXTPOPUPс параметър, равен на ID на темата, прави същото, но показва темата в изскачащ прозорец.
Има много повече методи в класаTApplication, но някои от тях се използват изрично много рядко (можете да ги видите във вградената помощ на Delphi), а някои ще бъдат обсъдени по-долу, когато обсъждаме събитията на обектаApplication. Бих искал само да насоча вниманието на читателя към един много полезен методMessageBox, който ви позволява да извикате диалогов прозорец с определен текст, определено заглавие и български надписи върху бутоните (в руските версии на Windows). Това е най-успешният напълно русифициран стандартен диалог, но неговото разглеждане, за съжаление, е извън обхвата на тази книга. Вижте повече за това в следващите книги от поредицата Всичко за Delphi.
КласътTApplicationдефинира много събития, които са много полезни за организиране на приложение. Преди това, за да се използват тези събития, беше необходимо да се въведат съответните манипулатори и да се насочат към обектаПриложениесъс специални оператори. Delphi 5 представи компонентаApplicationEvents, за да направи тази задача много по-лесна. Този компонент прихваща събитията на обектаПриложениеи следователно манипулаторите за тези събития вече самогат да бъдат написани като манипулатори на събития за невизуалния компонентApplicationEvents. Всеки формуляр за кандидатстване може да има свой собствен компонентApplicationEvents. Събитията на обектаПриложениеще бъдат разпространени до всички тези компоненти. Ако искате събитието първо да бъде изпратено до един от тях, приложете към него методаActivate, който ще го постави в началото на опашката на компонентаApplicationEvents. Ако не искате други компонентиApplicationEventsда получават събития, използвайте методаCancelDispatchна привилегирования компонент. След това, след обработка на събитието в този компонент, други компоненти наApplicationEventsизобщо няма да отговорят на тези събития.
Много манипулатори на събития на компонентаApplicationEventsполучават параметърHandledпо препратка. Стойността му по подразбиране еfalse. Ако сте обработили съответното събитие и не искате то да бъде допълнително обработено от други компонентиApplicationEvents, трябва да зададетеHandled = trueв манипулатора. Ако оставитеHandled = false, тогава други компоненти наApplicationEvents(ако има такива) ще се опитат да обработят събитието. Ако събитието остане необработено, тогава активният компонент ще се опита да го обработи, а ако не го обработи, тогава активната форма. Можете да попречите на други компоненти да обработват събитието, като използвате методаCancelDispatch, описан по-рано.
По-долу е дадена таблица със събития за компонентаApplicationEventsс техните кратки описания.