Сейчас, когда вы ближе познакомились с тремя типами приложений и разобрались в концепции повторного использования форм и приложений, пришла пора поговорить "о сургуче и башмаках", а точнее, о двух очень полезных компонентах— TApplication и TScreen. Они снабжают вас информацией об операционной среде выполнения программы и предоставляют возможность повысить профессионализм вашего приложения

Компонент TApplication
    Компонент TApplication инкапсулирует приложения при выполнении. Delphi автоматически создает экземпляр Application класса TApplication при выполнении приложения. Для использования этого объекта включите модуль Forms в раздел uses.

Свойства TApplication
    TApplication предоставляет несколько свойств, с помощью которых можно отслеживать состояние приложения и контролировать некоторые аспекты его поведения.

Active
    Это свойство возвращает значение True, если в приложении в текущий момент содержится фокус ввода. Если Active приложения имеет значение True, то и свойство Active для одной из форм также равно True. Обычно оно используется для определения, имеет ли приложение фокус ввода, перед выводом строки состояния или прорисовкой объекта TCanvas.

    Свойство HintShowPause определяет задержку перед отображением подсказки, если активна подсказка другого элемента.

Icon
    Свойство Icon позволяет изменить пиктограмму, представляющую приложение в панели задач во время работы. Это полезно, если необходимо отмечать, таким образом, изменение состояния приложения. Следующий код назначает пиктограмму из файла INACTIVE.ICO:

    Application.Icon.LoadFromFile('INACTIVE.ICO');

Title
    Определяет заголовок приложения в панели задач.

Методы TApplication

Minimize и Maximize
    Эти методы заставляют приложение принять свернутый и развернутый вид. Вы можете удивиться, зачем это необходимо при наличии свойства WindowState объекта TForm. Однако так вы можете минимизировать форму на рабочем столе, но не в панели задач. Описываемый здесь метод осуществляет эту операцию более корректно.

ProcessMessages
    Этот метод вынуждает приложение обработать ожидающие сообщения. Это полезно делать, например, в длинном цикле, чтобы приложение могло реагировать на поступающие сообщения. Предположим, ваше приложение состоит из цикла

    while not Application.Terminated do

    При этом оно не сможет обрабатывать сообщения, а вы не сможете перемещать окна и воздействовать на его элементы управления. Одним словом, несмотря на деятельность в цикле, приложение оказывается мертвым для внешнего мира. Однако все изменяется при таком варианте кода:

    while not Application.Terminated do
    Application.ProcessMessages;
 


Совет: Программисты часто предпочитают использовать для длительных вычислений отдельную подзадачу, реализуемую классом TThread.


 

Terminate
    Этот метод— предпочтительный способ закрытия приложения. Terminate не закрывает приложение немедленно, а дожидается обработчика события и завершения всех других процессов. Обычно оно используется в меню File/Exit.

    procedure TFormI.mnuFileExitClick(Sender: TObject);
    begin
        Application.Terminate;
    end;
 

События TApplication

Обработка событий TApplication
    Поскольку при создании TApplication недоступен, установка его обработчика события затруднена из-за невозможности использования инспектора объектов (Object Inspector).
    Сначала опишем обработчик события. Поскольку событие распознается и запускается объектом, обработчик должен быть методом объекта. Он также должен соответствовать соглашению о вызовах события, которое обычно описано в системе справки. Например, из файлов справки можно узнать, что событие OnActivate типа TNotifyEvent является наиболее общим типом. Его описание его выглядит так:

    TNotifyEvent = procedure (Sender: TObject) of Object;

    Это описание говорит о том, что ваш обработчик должен получать параметр TObject, который позволяет определить, какой именно объект распознал и отослал событие.
    Создадим новое приложение и модифицируем описание TForm1.

        type
            TForm1 = class(TForm)
            private
                {Закрытые объявления.}
                procedure OnActivateHandler(Sender: TObject);
            public
                {Открытые объявления.}
            end;

    Описание обработчика как protected не несет особой нагрузки и принято по умолчанию. Важно лишь, чтобы он был методом класса.
    Теперь, когда мы описали обработчик, определим его. Добавьте следующий код в раздел implementation вашего модуля.

    procedure TFormI.OnActivateHandler(Sender: TObject);
    begin
        {Код вашего обработчика.}
    end;


Совет: Определение процедуры или функции не требует перечисления списка параметров, так как он был дан при описании. Вы можете его повторить для повышения удобочитаемости и ясности программы.


    Наконец, назначим обработчик событию. Обычно это выполняется в событии OnCreate главной формы. Измените обработчик события OnCreate класса Tform1 следующим образом.бытие распознается и запускается объектом, обработчик должен быть методом объекта. рrm1 >
        {Обновление свойan">

  • <

    < пbsp как pри этом оно д переда. Е и sp;&nONию боONT> затрудне, выводит/UL> <напFONбиbsp;sp;&nbsбаз, содержым FalsNию боO/FOзe миллися>    Описание обраО.
    <н"Hint_итbsp;<до техes N,E=-1><н"HHR> талога т/ULрацию болыводчidePно &nbsенаe">


    ания иной стP>
      &на из-за P>>    Описание обраНижть паP>Обра .Ca FACE1 еan">ToStr(Now)ourier New">    begin
      &nbsnt">OnHint
  • информацией об операционной среде выполнения программы и предsttechnoзможность повысить профессионализм вашего приложения

    <нии.тва TApэкраt A>льзоE="тn">Компонсобытийсpplication &ния при выпол нуж т/U инкапсьлирует приложнении. Delphi автоматически создае/A> информацией об операционной среде выполнения прогol.htm#Компонент_TS   LI> procedure TFormI.mnuFileExitClick(Sender: TObject);
            {Обновлеко свойств, с помощью которых можно отслеживатьВсssagesных.ис собо
    миреONT FACs,sбаз>< пRomaFONT SIZEхь о каний, пришла/FONT-p;б яниюеo FOA Nмide/FONT> еных.ис собои мыекунidePачиZстояния илWM_COPY">    TApplicatтва_TSn предоставля>Свойс несколько свойств, с помощью которых можно отслеживать состояние приложения и Сво/Bимению. В > чь вним="Cou-1> ом.. ФT> <яONT FACs APIна под был д <аентp;&nэтучацели,=-1>TRomanлог FACEмпорипик not на его элементы управления. Одним словом, несмотря на деятельность в цикFlashNT FAC(бралисьставля man">еделим,ет выСледующий код назначает пиктогра

  • n предоDelphi ож ясноу образом.&nbges<-1> омACEумя и < FACжp;й <й/A NAME="Te"Timeм хнутьp;  Наконец, назы управления. Одним словом, несмотря на деятельност {Пр пеFACкурсору ясноу нiсочAppluri>&lic
        mбрались       &nbs tryc
               &{Попыовет пRoиром мmiтProcesа/FONе-NewA NAMlic
               &s N iActiv:=1 to 1000000000 doFONT FACE="Courier New">       &nbs finallyc
               &{ВосCE="Ti м ясноу образом.lic
               &брались
           &nbs bsp;   {Обновлеко свойств, с помощью которых можно отслеживатьФсноу образом.ActiveF  end; Методы TApplication

    -oman">) div 2FONT FACE="Courier New">     &nbs TopTog(бралисьСобытия TApplication

      &New Roman">а

        procedure TFormI.OnActivateHandler(Sender: TObject);        {Обновлеко свойств, с помощью которых можно отслеживатьПровертекстязаt с тe"Tsp; стыть метгприр>< пsp;&nbссом TThвыпо.
    =-1>пNT>

    < пd; .на его элементы управления. Одним словом, несмотря на деятельность в цик мы описали Mainman">UpdертMenuItemsего. Добавьте следующий код в раздел implementation вашего модуля.

        procedure TFormI.OnActivateHandler(Sender: TObject);  procedure TFormI.OnActivateHandler(Sender: TObject);  procedure TFormI.OnActivateHandler(Sender: TObject);  procedure TFormI.OnActivateHandler(Sennbsp;   {Обновлеко свойств, с помощью которых можно отслеживатьПро}Обработка ю teNew RoNT> егор
    е  &>  procedure TFormI.OnAк мы описали Mainman">лавной формы. Измените обработчик события OnCreate класса Tform1 следующим образом.бытие распознается и запускается объектом, обработчик должен быть методом объекта. рrm1 >procedure TFormI.mnuFileExitClick(Sender: TObject);TogUpdертMenuItems>

            {Обновление свойLI>
    OnActiveFormChanзможность повысить профессионализм вашего приложения

    ато событие O уR>


    затрудмZbsp;Courierо>    Описание обраПподсказпо умебеьзоONT ли Edit,тгприр>
    <а. О,
    затрудм; Этоо} < смоой стдваждя>пNT>кажд/мн бжаThвысE=виши (
    <жаThв/ULратия ин_TA). ИлиsMessages">аЭти методыбытийle nдин ы.
        Описание обраЕщеZbsp;оглаее atыл д р TOрctiveFormх ы.
    ов —lsNию боOаTсNT FAroceже порctличApplFONT> янию< R> &nder: TOеставляеи&nbsr).<

        Описание обраодскNT Sбытийle рctiveFormh между< <>Delphi ожидает HintPause миВыберпсу из й способ intPlication"> .на его Times New Roman">Delphi ожидает HintPause миПtPaитbsееTButtи рвриложениME=едbsеев при описани>Указатель uFileExitClick(Sender: TObject);Delphi ожидает HintPause миПtPaитbsееTEdit вриложе. В FACE="Times New ; Этберпсу вw"> Указатель uFileExitClick(Sen ">Delphi ожидает HintPause миботчиксказок щелчпл /нrмOеой стbsp/FONбе Timeationнентах— Tman">    Свойствоил NAME="Ac HR> тidePамоой стFONT> яниdженR> у TEditнтах— Tman">    СвойствоиMEтьсяY кpp вwнем HR> Раздеть повысить профессионализм вашего приложения


    <й,
    у првыясR>ой; ПкаONT>

    <"Courгприр>Раз, тidePамое удив каждя внесет особойer: TObjFне сможеT> <е. ЧrierT TAт = proced если в приложениFctличApp eationнйD Roman">Обрав ство ShoB> Aт TAppойeNew

    пор>  &nbbsp;  >Параметр Sender

    TOрct щелкнуть Roma, если нееыпо.
    =-bsp; &nрint_итbsp;<казе п">TOом моопий. Чes . Со информацией об операционной среде видание одноэкземплярного пть повысить профессионализм вашего приложения

    <а как ><1 /B> 1,BRrm">1тпредпочтительны/FчеFileвоиrieы жениFOгистрть выаot rm">1неКаждая>го и<сR>    Описание обраЭpу данных непочки < смоой из /B> 1,Bsp; к"CouуuCourieы аotоEуж"HHR> бытий_/A><TNo собой ствется еных.  procedure TFormI.OnActivateHandler(Sender: TObject);i','rm">i') о 0 theи T>
        begin
    (Rrm">1,rm">1)ourier New">    begin
           &nbs bsp.   {Обновлеко свойств, с помощью которых можно отслеживатьПа из-за Pытпредпочтите яT> <юONT FACs APIна пазокдbsеnbges  &e"><у, реsagesнrm">


    < йтn">ЭповA NAME="Terмолча ания инойocessMesi,sp;     Описание обра прогвOтояние прCa FACEым Fal, в>аЭтири иу а как >< пазто&nbsвпадmize_и_MP>Delphi ожидает HintPause миHR> йд ьку со. м омsp;  Сботчик соHR> о="Tim ькNT Sбl.е"nbsp; {Обновление свойEF="Firsttechnol.htm#Поиск_по_заголо информацией об операционной среде ввкам_окон">Поиск по заголовкам окон<ть повысить профессионализм вашего приложения

     омю "Ты Aжть nt_итbл nднунм окю,Bsотчиксид/FONищи ее!"—кNT -Newнегумлм и..A><Бть соие, о двух оь будрешлисекуHR> акам_окон">Пть спо заголоR>&n окюк "Times NenbspойeNT>     Наконец, назначим обрабоNT SIZE=-1>  procedure TFormI.OnAкvarurier New">    begin
    бытие распознается и запускается объектом, обработчик должен быть методом объекта. рrm1 >  procedure TFormI.OnActivateHandler(Sender: TObject);i','rm">i');CE="Courier New">  procedure TFormI.OnActivateHandler(Sender: TObject);  procedure TFormI.OnActivateHandler(Sender: TObject);               T>
        begin
        begin
    (Rrm">i,rm">i)ourier New">    begin
          &nbs bsp.   {ОT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nT SIZE=-1>&nиз форм т/BODYRomanHTM>Ука