Главная » Delphi » Система сообщений Delphi

0

Подпрограммы библиотеки VCL выполняют существенную часть  обработки сообще ний  Windows в приложении. В частности, цикл сообщений встроен в модуль Forms биб лиотеки VCL, благодаря чему прикладному программисту не нужно беспокоиться о выбор ке сообщений из очереди и передаче их соответствующим процедурам окон. Кроме  того, Delphi  помещает информацию из записи типа TMsg в собственную запись типа TMessage, определение которой приведено ниже.

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;

Обратите внимание, что в записи TMessage содержится меньше  информации, чем в исходной записи TMsg. Это  связано с тем,  что  Delphi берет часть  обработки сооб щений Windows  на себя,  и в запись  TMessage помещается только  та часть  информа ции, которая необходима для дальнейшей обработки.

Важно отметить, что в записи TMessage содержится поле Result (результат). Как уже говорилось, некоторые сообщения требуют возврата значения из процедуры окна после завершения их обработки. В Delphi  такая  задача решается совсем  просто — дос таточно поместить возвращаемое значение в поле  Result записи TMessage. Более подробная информация по этой  теме  приведена далее  в разделе “Возврат  результата обработки сообщения”.

Специализированные записи

В дополнение к обычной записи типа TMessage в Delphi определен набор  специа лизированных записей для всех типов  сообщений Windows.  Они  предназначены для того,  чтобы  обеспечить программисту возможность работы со всей  содержащейся в исходном сообщении Windows  информацией без  необходимости декодировать зна чения полей  wParam и lParam. Определения всех типов  этих записей находятся в мо дуле Messages. Ниже  приведен пример записи, используемой для большинства типов сообщений Windows о событиях мыши.

type

TWMMouse = packed record

Msg: Cardinal;

Keys: Longint;

case Integer of

0: (

XPos: Smallint;

YPos: Smallint);

1: (

Pos: TSmallPoint;

Result: Longint);

end;

Все типы  записей для конкретных сообщений о событиях мыши  (например WM_LBUTTONDOWN или WM_RBUTTONUP) определяются просто как записи типа TWMMouse, что и показано ниже.

TWMRButtonUp = TWMMouse; TWMLButtonDown = TWMMouse;

НА ЗАМЕТКУ

Специализированные записи сообщений определены практически для всех стандартных сообщений Windows. Соглашение о присвоении имен требует, чтобы имя записи соот- ветствовало имени сообщения с префиксом T в верблюжьей нотации (т.е. разделение слов в имени прописными буквами, а не символами подчеркивания). К примеру, запись для сообщения WM_SETFONT должна иметь имя TWMSetFont.

Следует отметить, что запись типа TMessage создается для всех типов сообщений

Windows и в любых ситуациях. Но работать с такими записями не так удобно, как со

специализированными.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии