Лекция

Скачать

Тема: Создание и обработка сообщений и событий. Сообщения Delphi. Методы обработки сообщений. Генерация сообщений. Создание событий. Обработка сообщений VCL. Управление циклом обработки сообщений.

Цель: познакомить с методами обработки сообщений

Стандартная библиотека классов Delphi VCL предлагает разработчику достаточно большой набор сообщений и методов их разработки. Однако он имеет возможность добавить новое сообщение или переопределить методы обработки существующих сообщений.
При создании нового сообщения необходимо выполнить следующие действия:

1.                  описать тип сообщения;

2.                  объявить номер (или индекс) сообщения;

3.                  объявить метод обработки нового сообщения в классе, который должен его обрабатывать;

4.                  инициализировать (передать) сообщение.

Сообщения Delphi. В Delphi определено около 100 стандартных типов сообщений. В соответствии с правилами Windows сообщение состоит из нескольких полей. Первое поле обычно называется Msg. Оно должно содержать индекс сообщения - 16 разрядное целое положительное число (тип Cardinal). Далее следуют поля, содержащие передаваемые значения. Последние поля обычно используются для записи результата обработки сообщения. Они могут отсутствовать.

Например, основной тип сообщений, используемых в Delphi, определяется следующим образом:

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;
end;

Номер сообщения. Номер (или индекс) сообщения используется для идентификации сообщения в системе: он определяет вид события, о котором система уведомляет приложение (нажатие клавиш, нажатие кнопок мыши и т.д.).
При создании собственных сообщений следует учитывать, что номера с 0 до $399 зарезервированы за системой. Первый свободный номер обозначен константой WM_USER = $400, относительно которой обычно и определяются номера пользовательских сообщений:

Const Mes1 = WM_USER;
Mes2 = WM_USER+1;
Методы обработки сообщений. Класс, объекты которого должны принимать и обрабатывать некоторые сообщения, должен включать специальные методы обработки этих сообщений. При разработке этих методов необходимо учитывать специальные правила, существующие в Delphi.

Метод обработки сообщения по умолчанию является динамическим, причем спецификаторы dinamic или override при его описании опускаются:

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

Имена методов обработки некоторого сообщения, переопределяемых в иерархии классов, могут не совпадать: переопределяемый метод идентифицируется по совпадающему номеру сообщения, указываемому после специальной директивы message. Номер сообщения обычно задается в виде символического имени, но может указываться и целой положительной константой.

Добавление метода обработки сообщений к классу выполняется так же, как и любого другого метода:

type <имя класса>= class <имя класса-родителя>
public
Procedure wm<имя метода>(var Message:<тип сообщения>);
message <номер сообщения>;
. . .
end.

Контрольные вопросы

1.      Какие действия нужно выполнить для создания нового сообщения

2.      Для чего используется номер (или индекс) сообщения для идентификации


Скачать


zharar.kz