Как обрабатывать сообщения
Обработка сообщений означает, что приложение будет тем или иным образом реагировать на полученные от операционной системы сообщения. В стандартном приложении Windows обработка сообщений сосредотачивается в процедурах окна. Delphi, частично обрабатывая сообщения, упрощает работу программиста, позволяя вместо одной процедуры для обработки всех типов сообщений создавать независимые процедуры для обработки сообщений различных типов.
Все процедуры обработки сообщений должны отвечать следующим требованиям:
- Процедура должна быть методом объекта
- Процедуре должен передаваться один передаваемый по ссылке параметр, т.е. с помощью описания var. Тип параметра должен быть TMessage или другой, зависящий от типа специализированного сообщения
- Описание процедуры должно включать ключевое слово message, за которым должна следовать константа, задающая тип обрабатываемого сообщения
Вот пример объявления процедуры, обрабатывающей сообщение WM_Paint
procedure WMPaint(var Msg: TWMPaint); message wm_Paint;
|
[соглашение по присвоению имён требует присваивать обработчику сообщения то же имя, что и имя обрабатываемого сообщения, но без символа подчёркивания и указанием первым знаков имени прописными буквами]
В качестве примера напишем процедуру обработки сообщения WM_Paint, которая вместо перерисовки будет выдавать звуковой сигнал:
Для этого сначала нужно объявить процедуру в частных объявлениях (в области Private объекта TForm1):
procedure WMPaint(var Msg: TWMPaint); message wm_Paint;
|
Теперь в разделе implementation модуля добавляем определение процедуры (в этом случае указание ключевого слова message не требуется):
procedure TForm1.WMPaint(var Msg: TWMPaint);
begin
beep;
inherited;
end;
|
Обратите внимание на ключевое слово inherited, которое позволяет передать сообщение обработчику этого сообщения, принадлежащему классу-предку, т.е. если бы мы в нашем случае не указали бы это слово, перерисовка окна не осуществлялась бы, а выполнялось бы только только то, что было описано в области реализации нашего приложения, т.е. только бы подавался звуковой сигнал.
|