Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
33
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

2. Посылка сообщений

В Windows API определен ряд функций, позволяющих послать сообщение.

2.1. Функция SendMessage

Функция посылает указанное в ней сообщение окну или множеству окон и не возвращается, пока это сообщение обрабатывается. Этим она отличается от функции PostMessage, которая возвращается сразу после передачи сообщения.

Объявление функции:

function SendMessage(hWnd: HWnd; Msg, wParam: word; Param:LongInt): Longlnt;

Параметр hWnd — дескриптор окна, которому передается сообщение. Если этот параметр равен HWND_BROADCAST, то сообщение передается всем окнам верхнего уровня в системе, включая недоступные и невидимые, кроме дочерних.

Параметр Msg определяет передаваемое сообщение. Параметры wParam и 1Раram могут содержать дополнительную информацию. Значение, возвращаемое функцией, зависит от вида сообщения.

2.2. Функция PostMessage

Эта функция похожа на SendMessage, но в отличие от нее она помещает сообщение в очередь и сразу возвращается. Таким образом, PostMessage не годится для передачи срочных сообщений, но зато она не блокирует вызвавшее приложение на время обработки сообщения приемником.

Объявление функции:

function PostMessage(hWnd: HWnd; Msg, wParam: word; lParam:LongInt): boolean;

Параметр hWnd — дескриптор окна, которому передается сообщение. Если этот параметр равен HWND_BROADCAST, то сообщение передается всем окнам верхнего уровня в системе, включая недоступные и невидимые, кроме дочерних. Если этот параметр nil, то сообщение ставится в очередь сообщений (если она есть) текущего процесса.

Параметр Msg определяет передаваемое сообщение. Параметры wParam и 1Раram могут содержать дополнительную информацию. Функция возвращает ненулевое значение при успешном завершении и нуль в случае аварийного завершения. В этом случае причину ошибки можно установить вызовом функции GetLastError.

Есть еще ряд функций, позволяющих передавать сообщения, но мы на них не будем останавливаться, так как они реже используются в приложениях Delphi.

3. Обработка сообщений

Во всех оконных компонентах предусмотрены обработчики сообщений Windows по умолчанию. До сих пор вы пользовались именно стандартными обработчиками сообщений. Однако, вы можете определить и свои собственные обработчики, заменив ими обработчики по умолчанию, или дополнив их. Объявление своего обработчика помещается в описание класса оконного компонента, как правило, в раздел private. Синтаксис объявления:

procedure <имя>(var <параметр>:<тип параметра>); message <сообщение>;

Здесь <имя> обозначает имя процедуры обработки сообщения. Имя может быть любым, но обычно принято делать его тождественным имени обрабатываемого сообщения, исключив из него символ подчеркивания. Передаваемый в обработчик параметр также может иметь любое имя. Этот параметр представляет собой запись, через которую в обработчик передаются параметры сообщения, а из обработчика возвращается значение поля Result, фиксирующее результат обработки, <тип параметра> — это тип структуры параметров сообщения. Практически всегда имя этого типа тождественно имени обрабатываемого сообщения с исключенным из него символом подчеркивания и добавленным префиксом Т. После ключевого слова message записывается тип сообщения.