Главная страница
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.039 c
3-1132002044
S@shka
2005-11-15 00:00
2006.01.15
Удаление всех хранимых процедур в БД


2-1135705069
melnik11
2005-12-27 20:37
2006.01.15
Как сделать так что нажав на Button открывался какой либо файл


2-1135251122
Allocal
2005-12-22 14:32
2006.01.15
массивы в Delphi


5-1121024936
cranium
2005-07-10 23:48
2006.01.15
Компонет наследник TGraphicControl как узнать цвет родителя


6-1127751490
ILN
2005-09-26 20:18
2006.01.15
Webbrowser в связке с сокетами, контролируем броузера