Выбрать главу

Совет: Программисты часто предпочитают использовать для длительных вычислений отдельную подзадачу, реализуемую классом 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 следующим образом.

procedure TFormI.FormCreate(Sender: TObject);

begin

Application.OnActivate:= OnActivateHandler;

end;

OnActivate и OnDeactivate

Эти события оповещают программу об изменении свойства Active.

OnException

Событие вызывается при необработанной исключительной ситуации.

OnHint

Событие генерируется при перемещении указателя мыши над объектом — потомком TControl, если его свойство Hint равно значению, которое отличается от пустой строки.

Onldle

Событие генерируется, когда приложение ожидает ввода и не занято обработкой события. Обычно оно используется для выполнения фоновых задач наподобие загрузки базы данных или обработки изображения.

Обработчик получает логический параметр Done, по умолчанию равный True. Если вы оставляете его равным True, обработчик не запустится до тех пор, пока не будет получено и обработано очередное сообщение. Если вы установили Done равным False, обработчик будет запускаться во время ожидания сообщения.

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

Ниже приведен код использования обработчика для вывода текущего времени в объекте TPanel.

procedure TFormI.OnIdleHandler(Sender: TObject; var Done: Boolean);

begin

pnlTime.Caption:= TimeToStr(Now);

end;

Компонент TScreen

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

Свойства TScreen

ActiveControl

Это свойство возвращает объект TWinControl, имеющий фокус ввода. Обычно оно используется для реализации команд Copy, Cut и Paste для текстовых управляющих элементов. Следующий код, помещенный в обработчик TMenuItem, выполняет функцию Copy.

procedure TFormI.mnuEditCopyClick(Sender: TObject);

begin

Screen.ActiveControl.Perform(WMCOPY,0,0);

end;

Все, что происходит в мире Windows, базируется на сообщениях. Для выполнения какой-либо функции управляющие элементы часто отсылают сообщения самим себе. Так и в этом примере управление происходит путем передачи сообщения WMCOPY.

ActiveForm

Это свойство возвращает объект TForm, имеющий фокус ввода. Если приложение неактивно, свойство указывает, какая именно форма будет иметь фокус ввода при активизации приложения. В качестве примера используем свойство для создания мигающего заголовка формы, чтобы привлечь внимание пользователя. Функция Windows API, предназначенная для этой цели, должна получить дескриптор окна: