![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция SendMessage - посылка, принятие сообщений [D7, WinXP]
Andrey02 © (2003-06-06 09:44:00)Как правильно работать с этой функцией?
В примере Delphi про функцию SendMessage:
1. Посылаем сообщение
SendMessage(Application.Handle, WM_USER+2000, 0, 0);
2. Ловим соообщение в FormCreate:
Application.OnMessage := AppMessage;
3. Обработчик полученного сообщения
procedure TMain.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_USER+2000 then
begin
ShowMessage("Сообщение WM_USER+2000");
Handled := True;
end;
end;
В отдельно взятых примерах
if Msg.message = WM_RBUTTONDOWN then ... - работает
SendMessage(Application.Handle, WM_CLOSE, 0, 0); - работает
А полностью - не работает.
Вопрос: Что-то нехватает, или есть ошибка?
Игорь Шевченко (2003-06-06 10:30:00) [1]Application.OnMessage ловит только сообщения посланные по PostMessage. Для того, чтобы поймать сообщения посланные и по PostMessage и по SendMessage, необходимо явно объявлять обработчик сообщения у формы (или у любого наследника TWinControl, которому послыается это сообщение)
TMain = class(TForm)
....
private
procedure WMMyMessage(var Message : TMessage); message WM_MYMESSAGE;
....
end;
pasha676 (2003-06-06 10:07:00) [2]Пример пользовательского сообщения по Пачеко и Тейсксейре. Насколько я понял, тебе нужно именно пользовательское (или я ошибаюсь).
1) Обявляем сообщение. Как правило в константах.
форэкзампле - MyMess=WM_USER+177.
2) Объявляем обработчик. В описании класса (ну например в TForm1)
TForm1=class(TForm)
Procedure ResiveMyMess(var Msg:TMessage); message MyMess;
3) В юните описание самого приемника сообщений
TForm1.ResiveMyMess(var Msg:TMessage);
begin
сюда попадет, когда придет сообщение. тут все и делаем
Обработчик одним словом
end;
4) Как послать сообщение
PostMessage(Form1.Handle, MyMess,0,0);
Усе.