![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятки с POSTMESSAGE
GuestTM © (2003-07-09 05:31:00)Простой код
var mss: integer;
procedure TForm1.DefaultHandler(var Message);
begin
with TMessage(Message) do
begin
if Msg = mss then
begin
ShowMessage("Custom Message Accepted");
end
else Inherited DefaultHandler(Message);
end;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
PostMessage(wnd_Broadcast, mss, 1, 2); //???
( wnd_Broadcast, mss, 1, 2)Простой код
var mss: integer;
procedure TForm1.DefaultHandler(var Message);
begin
with TMessage(Message) do
begin
if Msg = mss then
begin
ShowMessage("Custom Message Accepted");
end
else Inherited DefaultHandler(Message);
end;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
PostMessage(wnd_Broadcast, mss, 1, 2); //???
//! SendMessage(wnd_Broadcast, mss, 1, 2);
end;
initialization
mss := RegisterWindowMessage(PChar("wm_DemoWinMessage"));
Вопрос. Все работает отлично (принимаются сообщения), если посылать командой SendMessage, но если же использовать команду PostMessage, то
сообщение не обрабытывается. Вопрос очевиден. Почему не работает PostMessage для посылки к HWND_BROADCAST???
GuestTM (2003-07-10 19:53:00) [1]
Так ведь же RegisterWindowMessage дает им значение "пользовательских" величин, то есть выше или равное WM_USER! А в MSDN приведен текст про то, что ниже диапазона WM_USER...
Spawn (2003-07-09 18:33:00) [2]
Упс)) Это только если параметры указатели))
Spawn (2003-07-09 18:32:00) [3]
MSDN:
If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage and SendNotifyMessage), its message parameters cannot include pointers. Otherwise, the operation will fail. The functions will return before the receiving thread has had a chance to process the message and the sender will free the memory before it is used.
То есть если твоя месага меньше чем WM_USER, то будет облом
Игорь Шевченко (2003-07-09 14:37:00) [4]
Так ловит или не ловит ? :)
GuestTM (2003-07-09 13:28:00) [5]
- А зачем Application.OnMessage? Ведь я использую более идентичный аналог Application.OnMessage, который является override-функций глобального приемника сообщений!
- >>А если попробовать: PostMessage(Handle, mss, 1, 2);?
в том то и дело, если использовать конкретный Handle, то все в порядке. Задача стоит именно в том, чтобы послать BROADCAST-сообщение.
wl (2003-07-09 13:17:00) [6]
А если попробовать:
PostMessage(Handle, mss, 1, 2);?
Игорь Шевченко (2003-07-09 09:33:00) [7]
Application.OnMessage тоже не ловит это сообщение ?