Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
5-1121121621
Brack
2005-07-12 02:40
2006.01.15
Как можно ScrollBox`у добавить свойство Canvas?


14-1135311825
Ученик чародея
2005-12-23 07:23
2006.01.15
Европа официально признала, что в глюках программ виновата Винда.


2-1135329217
oleg_
2005-12-23 12:13
2006.01.15
Чем может быть вызвана такая ошибка?


2-1133802174
Userrrrr
2005-12-05 20:02
2006.01.15
Как скопировать файл из интернет на сервер?


2-1135628629
Danja
2005-12-26 23:23
2006.01.15
Pen.Color