Сообщения (часть 3)
Как вы знаете, Delphi предоставляет программисту все средства, необходимые для обработки сообщений. Простейший способ обработки сообщений заключается в использовании директивы message.
На практике это выглядит примерно так (ниже представлена обработка сообщения wm_move).
type TSomeForm = class(TForm)
{ процедура обработки сообщения Windows} procedure WMMOVE (var Message: TMessage); message
WM_MOVE;
procedure TSomeForm. WMMOVE; begin {что-то делаем} inherited end;
Механизм работы оконной процедуры в Delphi устроен так. что система сама ищет среди методов класса специальные методы для обработки сообщения Windows, используюе директиву message.
Как вы уже заметили, в отличие от обработчиков VCL для процедуры обработки сообщения Windows имя метода не имеет значения, значение имеет только константа, уникально идентифицирующая сообщение и стоящая после директивы message. Именно поэтому при вызове перекрытого метола для обработки данного сообщения достаточно написать inherited без указания имени метода. Такой способ вызова не приведет к ошибке даже в том случае, если класс-родитель вообще не имел метода для обработки такого сообщения.
Само сообщение представлено в Delphi типом Message: type
TMessage = record Msg: Cardinal;
case Integer of
0: (WParam: Longint; LParam: Longint; Result: Longint; 1: (WParamLo: Word; WParamHi: Word; LParamLo: Word; LParamHi: Word; ResultLo: Word; ResultHi: Word;
end;
Данный тип представляет собой запись, содержащую 32-разрядные целые поля Msg, WParam, LParam И Result.
Первое поле содержит уникальный идентификатор сообщения, два следующих - параметры сообщения, а в поле Result метод должен присвоить то значение, которое потом вернет системе данный обработчик. Именно из-за необходимости передавать значение параметр метода обработки сообщения должен быть переменной.
Комментарии (0)