Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1128322497
Sniper17
2005-10-03 10:54
2006.01.15
Передача значений переменных через сокеты по Internet


4-1131347323
Ботвин Дмитрий
2005-11-07 10:08
2006.01.15
Вставить шрифт


2-1135668070
oleggar
2005-12-27 10:21
2006.01.15
где эти сообщения ?


1-1134320983
SergP
2005-12-11 20:09
2006.01.15
Работа с одной переменной в нескольких потоках.


4-1131268194
spyrytus
2005-11-06 12:09
2006.01.15
Как в DLL можно вставить ресурс ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский