Листинг 10.13.
Сообщения, поддерживаемые программой
const
mess_first = 0;
mess_last = 15;
var
messages_list: array [mess_first..mess_last] of MessageInfo =
(
(value: WM_DESTROY; name: \'WM_DESTROY\ used: False),
(value: WM_MOVE; name: \'WM_MOVE\ used: False),
(value: WM_SIZE; name: \'WM_SIZE\ used: False),
(value: WM_ACTIVATE; name: \'WM_ACTIVATE\ used: False),
(value: WM_SETFOCUS; name: \'WM_SETFOCUS\ used: False),
(value: WM_KILLFOCUS; name: \'WM_KILLFOCUS\ used: False),
(value: WM_ENABLE; name: \'WM_ENABLE\ used: False),
(value: WM_SETTEXT; name: \'WM_SETTEXT\ used: False),
(value: WM_GETTEXT; name: \'WM_GETTEXT\ used: False),
(value: WM_PAINT; name: \'WM_PAINT\ used: False),
(value: WM_CLOSE; name: \'WM_CLOSE\ used: False),
(value: WM_QUIT; name: \'WM_QUIT\ used: False),
(value: WM_SIZING; name: \'WM_SIZING\ used: False),
(value: WM_MOVING; name: \'WM_MOVING\ used: False),
(value: WM_NOTIFY; name: \'WM_NOTIFY\ used: False),
(value: WM_NCHITTEST; name: \'WM_NCHITTEST\ used: False)
);
Загрузка фильтра (выбранных и невыбранных сообщений в соответствующие списки) производится очень просто (листинг 10.14).
Листинг 10.14.
Загрузка фильтра сообщений
procedure TfrmMessages.LoadFilter;
var
i: Integer;
begin
//Загрузка фильтра сообщений
lstAvailMessages.Clear;
lstSelMessages.Clear;
for i := mess_first to mess_last do
if messages_list[i].used then
//Сообщение перехватывается
lstSelMessages.Items.Add(messages_list[i].name)
else
lstAvailMessages.Items.Add(messages_list[i].name);
end;
При обращении к форме f rmMessages, кроме загрузки фильтра, нужно произвести некоторые дополнительные действия. Поэтому работа с этой формой начинается так же, как и в случае формы свойств окна, с вызова ее специального метода (листинг 10.15).
Листинг 10.15.
Инициализация формы
procedure TfrmMessages.ShowMessages(wnd: HWND);
begin
self.wnd := wnd;
LoadFilter;
ShowModal;
end;
При нажатии кнопок > (выбрать) и < (отменить выбор) происходит перемещение сообщений между списками фильтра (листинг 10.16).