Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизSendMessage - проблемы. (WM_COPYDATA) Найти похожие ветки
← →
Andy BitOff © (2005-12-08 18:53) [0]Поясните мне пожалуйста следующий момент. Две моих программы общаются, точнее пытаются общаться, но у них это не особо хорошо получается =) посылая друг другу сообщения, в частности WM_COPYDATA. Вообщем приведу кусок кода и затем объясню проблему.
Первая программа:
procedure TMainForm.SomeProc1(Sender: TObject);
var
s:string;
cd:TCopyDataStruct;
...
begin
...
s:="SomeString";
cd.cbData := Length(s) + 1;
cd.lpData := PChar(s);
cd.dwData := 0;
SendMessage(FindWindow("Tfrm_Main","ListClient"),WM_COPYDATA,Longint(Handle), Longint(@cd));
...
end;
procedure TMainForm.SomeProc2(Sender: TObject);
var
s:string;
cd:TCopyDataStruct;
...
begin
...
s:="SomeString";
cd.cbData := Length(s) + 1;
cd.lpData := PChar(s);
cd.dwData := 0;
SendMessage(FindWindow("Tfrm_Main","ListClient"),WM_COPYDATA,Longint(Handle), Longint(@cd));
...
end;
FindWindow отрабатывает правильно.
Вторая программа:
type
Tfrm_Main = class(TForm)
...
private
...
procedure WMGetingRefer(var msg:TMessage); message WM_COPYDATA;
...
implementation
procedure Tfrm_Main.WMGetingRefer(var msg: TMessage);
var
pcd: PCopyDataStruct;
s:string;
begin
pcd := PCopyDataStruct(Msg.LParam);
s := PChar(pcd.lpData);
...
inherited;
end;
При посылке из первого приложения сообщения в первый раз, все отрабатывает правильно, но вот все последующие сообщения не доходят, т.е. эта процедура (WMGetingRefer) во второй программе отрабатывает только один раз. В чем может быть проблема?
← →
Leonid Troyanovsky © (2005-12-08 19:06) [1]
> Andy BitOff © (08.12.05 18:53)
> программе отрабатывает только один раз. В чем может быть
> проблема?
А, часом, не изменяет получатель заголовок своего окна?
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-12-08 19:09) [2]
> Andy BitOff © (08.12.05 18:53)
Кста, чего возвращает SendMessage.
--
Regards, LVT.
← →
Andy BitOff © (2005-12-08 19:20) [3]Leonid Troyanovsky © (08.12.05 19:06) [1]
А, часом, не изменяет получатель заголовок своего окна?
Нет.
Кста, чего возвращает SendMessage.
При первом True, при последующих False.
← →
Leonid Troyanovsky © (2005-12-08 19:22) [4]
> Andy BitOff © (08.12.05 19:20) [3]
> Кста, чего возвращает SendMessage.
> При первом True, при последующих False.
Ну, и GetLastError..
--
Regards, LVT.
← →
Andy BitOff © (2005-12-08 19:38) [5]GetLastError возвращает 1400
SysErrorMessage(1400)="Недопустимый дескриптор окна"
За подсказку спасибо. =)
Интересно почему? Заголовок окна действительно не меняется. А можно запомнить хендел при первом вызове FindWindow и потом обращаться по нему.
← →
Andy BitOff © (2005-12-08 19:43) [6]Проверил, если запомнить хендл, то таже фигня.
← →
Leonid Troyanovsky © (2005-12-08 19:45) [7]
> Andy BitOff © (08.12.05 19:38) [5]
> А можно запомнить хендел при первом вызове FindWindow и
> потом обращаться по нему.
Он иногда меняется. Например, при выборе нек. стилей.
Короче, при RecreateWnd.
Про правильность FindWindow следует поподробней.
--
Regards, LVT.
← →
Andy BitOff © (2005-12-08 19:59) [8]Все разобрался. Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c