Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Сообщения. Проблема возврата Result в DefaultHandler.
Посл.ответ Сообщение


Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 23 апреля 2007 12:21 · Поправил: ToBad
· Личное сообщение · #1

Пишу обработчик сообщений для обмена между двумя моими программками, но столкнулся с проблемой возврата значения.
По идее это можно делать и через result и через указатель на адрес например в lparam.
MyProc – обрабатывается, но sendmessage упорно возвращает 1.
Подскажите пожалуйста в чём моя ошибка.

type
TForm1 = class(TForm)
procedure DefaultHandler(var Message); override;
private
{ Private declarations }
public
{ Public declarations }
end;



procedure TForm1.DefaultHandler(var Message);
begin
with TMessage(Message) do
begin
if Msg = mymsg then begin
case wparam of
1:Begin
MyProc;
result:=5;
end;
end;
end else Inherited DefaultHandler(Message);
end;



Пример вызова:
b:=sendmessage(HWND_BROADCAST,mymsg,1,0);




Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2007 13:05
· Личное сообщение · #2

Проблема в HWND_BROADCAST, если поменять на Form1.WindowHandle, то всё нормально. Просто похоже окно формы в Delphi не top-level окно и поэтому BROADCAST до него не лобирается.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 23 апреля 2007 13:18
· Личное сообщение · #3

Player пишет:
до него не лобирается

если я правильно понял, то дело не в этом, т.к.:
ToBad пишет:
MyProc – обрабатывается

помоему надо не DefaultHandler объявлять.. Не помню, могу ошибаться. Может еще значение mymsg (<=400) не правильное. Используй WM_USER+1 или наподобие.

-----
radio uno in ibisa ...





Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 23 апреля 2007 13:19
· Личное сообщение · #4

Player пишет:
Проблема в HWND_BROADCAST, если поменять на Form1.WindowHandle, то всё нормально. Просто похоже окно формы в Delphi не top-level окно и поэтому BROADCAST до него не лобирается.


BROADCAST до него добирается, в моём обработчике срабатывает процедура MyProc. А вот результат упорно возвращается 1.




Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 23 апреля 2007 19:08
· Личное сообщение · #5

Player пишет:
Проблема в HWND_BROADCAST, если поменять на Form1.WindowHandle, то всё нормально.


Да, так работает. Спасибо !!!
А где можно прочитать чем это объясняется ?

Icelot пишет:
Используй WM_USER+1


Это с HWND_BROADCAST не катит. MyMsg назначаю с помощью RegisterWindowMessage.

Жаль конечно, что не получается применить HWND_BROADCAST. Не хотел использовать FindWindow.


 eXeL@B —› Программирование —› Сообщения. Проблема возврата Result в DefaultHandler.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати