|
||||||||||||||||||||||||||||||||||||||||||||||||
|
100 компонентов общего назначения Delphi 59.4. Приложение - компонент ApplicationEvents и объект ApplicationВ каждом приложении автоматически создается объект Application типа TApplication — приложение. Этот компонент отсутствует в палитре библиотеки, вероятно, только потому, что он всегда один в приложении. Application имеет ряд свойств, методов, событий, характеризующих приложение в целом. Рассмотрим сначала некоторые свойства Application. Булево свойство Active (только для чтения) характеризует активность приложения. Оно равно true, если форма приложения находится в фокусе. Если же пользователь переключился на работу с другим приложением, свойство Active равно false. Свойство ExeName является строкой, содержащей имя выполняемого файла с полным путем к нему. Это свойство удобно использовать, чтобы определять каталог, из которого запущено приложение и который может содержать другие файлы (настройки, документы, базы данных и т.п.), связанные с приложением. Выражение ExtractFilePath(Application.ExeName) дает этот каталог. Обычно свойство ExeName тождественно функции ParamStr(0), возвращающей нулевой параметр командной строки — имя файла с путем. Свойство Title определяет строку, которая появляется
около пиктограммы свернутого приложения. Если это свойство не изменяется
во время выполнения, то оно равно опции Title, задаваемой во
время проектирования на странице Свойство MainForm типа TForm определяет главную форму приложения. Булево свойство ShowMainForm определяет, должна ли главная форма быть видимой в момент запуска приложения на выполнение. По умолчанию оно равно true, что обеспечивает видимость главной формы в момент начала работы приложения. Если же установить в головном файле проекта Application.ShowMainForm равным false до вызова метода Application.Run и если при этом свойство Visible главной формы тоже равно false, то главная форма в первый момент будет невидимой. Свойство HelpFile указывает файл справки, который
используется в приложении в данный момент как файл по умолчанию. Если
это свойство не изменяется во время выполнения, то оно равно опции Ряд свойств объекта Application определяет ярлычки подсказок компонентов приложения. Свойство Hint содержит текст подсказки Hint того визуального компонента или раздела меню, над которым в данный момент перемещается курсор мыши. Смена этого свойства происходит в момент события OnHint, которое будет рассмотрено позднее. Во время этого события текст подсказки переносится из свойства Hint компонента, на который переместился курсор мыши, в свойство Hint объекта Application. Свойство Application.Hint можно использовать для отображения этой подсказки или для установки и отображения в полосе состояния текста, характеризующего текущий режим приложения. Свойство HintColor типа TColor определяет цвет фона окна ярлычка. По умолчанию это цвет clInfoBk, но его значение можно изменять программно. Свойство HintPause определяет задержку появления ярлычка в миллисекундах после переноса курсора мыши на очередной компонент (по умолчанию 500 миллисекунд или половина секунды). Свойство HintHidePause аналогичным образом определяет интервал времени, после которого ярлычок становится невидимым (по умолчанию 2500 миллисекунд или две с половиной секунды). Свойство HintShortPause определяет аналогичным образом задержку перед появлением нового ярлычка, если в данный момент отображается другой ярлычок (по умолчанию 50 миллисекунд). Это свойство позволяет предотвратить неприятное мерцание, если пользователь быстро перемещает курсор мыши над разными компонентами. Теперь остановимся на некоторых методах объекта Application.
Методы Initialize — инициализация проекта, и Run — запуск
выполнения приложения, включаются в каждый проект автоматически — вы
можете это увидеть в головном файле проекта, если выполните команду
procedure CreateForm(FormClass: TFormClass; var Reference);где FormClass — класс создаваемой формы, Reference — ссылка на создаваемый объект (его имя). Например: Application.CreateForm(TForm2, Form2); Метод Terminate завершает выполнение приложения. Если вам надо завершить приложение из главной формы, то вместо метода Application.Terminate вы можете использовать метод Close главной формы. Но если вам надо закрыть приложение из какой-то вторичной формы, например, из диалога, то надо применять метод Application.Terminate. Метод Minimize сворачивает приложение, помещая его пиктограмму в полосу задач Windows. Ряд методов связан с работой со справочными файлами. Выше уже говорилось о свойстве HelpFile, указывающем текущий файл справки. Метод HelpContext: function HelpContext(Context: THelpContext): Boolean;вызывает переход в файл справки на тему с идентификатором Context. Это идентификатор, который при проектировании справки поставлен в соответствие некоторой теме. Метод HelpJump: function HelpJump(const JumpID: string): Boolean;выполняет аналогичные действия, но его параметр JumpID — не идентификатор темы, а имя соответствующей темы в файле справки, задаваемое в нем сноской #. Метод HelpCommand: function HelpCommand(Command: Word; Data: Longint): Boolean;позволяет выполнить указанную параметром Command команду API WinHelp с параметром Data. Метод генерирует событие OnHelp активной формы или приложения, а затем выполняет указанную команду WinHelp. Полный список команд WinHelp вы можете найти в теме WinHelp справочного файла win32.hlp, расположенного в каталоге ...\Program Files\Common Files\Borland Shared\MSHelp. Приведем только некоторые из них. Команда HELP_CONTENTS с параметром 0 отображает окно Содержание справки. Команда HELP_INDEX с параметром 0 отображает окно Указатель справки. Команда HELP_CONTEXT с параметром, равным идентификатору темы, отображает тему с заданным идентификатором (это тождественно рассмотренному ранее методу HelpContext). Команда HELP_CONTEXTPOPUP с параметром, равным идентификатору темы, делает то же самое, но отображает тему во всплывающем окне. В классе TApplication имеется еще немало методов, но часть из них используется в явном виде очень редко (вы можете посмотреть их во встроенной справке Delphi), а часть будет рассмотрена ниже при обсуждении событий объекта Application. Хотелось бы только обратить внимание читателя на очень полезный метод MessageBox, позволяющий вызывать диалоговое окно с указанным текстом, указанным заголовком и русскими надписями на кнопках (в русифицированных версиях Windows). Это наиболее удачный полностью русифицируемый стандартный диалог, но его рассмотрение, к сожалению, выходит за рамки данной книги. См. о нем в следующих книгах серии «Все о Delphi». В классе TApplication определено множество событий, которые очень полезны для организации приложения. Ранее для использования этих событий было необходимо вводить соответствующие обработчики и указывать на них объекту Application специальными операторами. В Delphi 5 введен компонент ApplicationEvents, существенно облегчивший эту задачу. Этот компонент перехватывает события объекта Application и, следовательно, обработчики этих событий теперь можно писать как обработчики событий невизуального компонента ApplicationEvents. На каждой форме приложения можно разместить свой компонент ApplicationEvents. События объекта Application будут передаваться всем этим компонентам. Если вы хотите, чтобы событие передавалось прежде всего какому-то одному из них, примените к нему метод Activate, который поставит его в начало очереди компонентов ApplicationEvents. Если же вы при этом не хотите, чтобы другие компоненты ApplicationEvents получали события, примените к привилегированному компоненту метод CancelDispatch. Тогда после обработки события в данном компоненте другие компоненты ApplicationEvents вообще не будут реагировать на эти события. Во многие обработчики событий компонента ApplicationEvents передается по ссылке параметр Handled. По умолчанию его значение равно false. Если вы обработали соответствующее событие и не хотите, чтобы оно далее обрабатывалось другими компонентами ApplicationEvents, надо в обработчике установить Handled = true. Если же вы оставите Handled = false, то событие будут пытаться обрабатывать другие компоненты ApplicationEvents (если они есть). Если событие так и останется необработанным, то его будет пытаться обработать активный компонент, а если не обработает — то активная форма. Предотвратить обработку события другими компонентами можно, используя описанный ранее метод CancelDispatch. Ниже приведена таблица событий компонента ApplicationEvents с их краткими описаниями.
Приведем примеры использования событий компонента ApplicationEvents. Обработчик события OnHint: procedure TForm1.ApplicationEvents1Hint( Sender: TObject); begin StatusBar1.SimpleText := Application.Hint; end;отображает в полосе состояния StatusBar1 (см. раздел 7.6) вторую часть свойства Hint любого компонента, в котором определено это свойство и над которым перемещается курсор мыши. Отображение происходит независимо от значения свойства ShowHint компонента. Обработчик события OnShowHint: procedure TForm1.ApplicationEvents1ShowHint( var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo); begin if (HintInfo.HintControl.ClassName = 'TEdit') then begin HintStr := (HintInfo.HintControl as TEdit).Text; ApplicationEvents1.CancelDispatch; end; end;подменяет для окон редактирования типа TEdit текст ярлычков на текст, содержащийся в этих окнах редактирования. Такой прием позволяет пользователю, подведя курсор мыши к окну редактирования, увидеть во всплывающем окне полный текст, который может не быть виден обычным образом, если он длинный и не помещается целиком в окне редактирования. Обработчик события OnHelp: function TForm1.ApplicationEvents1Help(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin if (Command = HELP_CONTEXT) and (Data<10) then begin Application.HelpCommand(HELP_CONTEXTPOPUP, Data); CallHelp := false; end; Result := true; end;обеспечивает отображение всех контекстных справок с номерами идентификаторов тем, меньшими 10, во всплывающем окне, не вызывая при этом WinHelp. Это дает возможность отобразить многострочные (в отличие от ярлычков) всплывающие окна, поясняющие назначение тех или иных элементов приложения. Обработчик события OnShortCut: procedure TForm1.ApplicationEvents1ShortCut( var Msg: TWMKey; var Handled: Boolean); begin if Msg.CharCode = Ord('Q') then if Application.MessageBox( 'Действительно хотите завершить работу?', 'Подтвердите завершение', MB_YESNOCANCEL + MB_ICONQUESTION) = IDYES then Application.Terminate; end;перехватывает нажатие пользователем клавиш и, если нажата клавиша с символом «Q» (в любом регистре и независимо от установки русского или английского языка), то пользователю методом Application.MessageBox предлагается диалоговое окно, изображенное на рис. 9.4.
Если пользователь в нем нажмет кнопку procedure TForm1.ApplicationEvents1Activate( Sender: TObject); begin Label1.Caption := 'Уpa! Я работаю!'; end; procedure TForm1.ApplicationEvents1Deactivate( Sender: TObject); begin Label1.Caption: = 'Увы! Меня покинули!'; end;обеспечивают появление в метке Label1 соответствующей надписи каждый раз, когда пользователь переключается из данного приложения в другое и возвращается назад. |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил