Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Сообщение форме   Найти похожие ветки 

 
Квэнди ©   (2007-01-29 18:35) [0]

Здравствуйте.
Есть следующий код:
в самой программе:
function Check: boolean;
begin
 HM := OpenMutex(MUTEX_ALL_ACCESS, false, "MyOwnMutex");
 Result := (HM <> 0);
 if HM = 0 then HM := CreateMutex(nil, false, "MyOwnMutex");
end;
begin
if (Check)and(paramcount=0) then
begin
showmessage("Приложение запущено!");
exit;
end;
if (Check)and(paramcount>0) then
begin
reg:=tregistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey("software\linkterm",true);
han:=reg.ReadInteger("handle");
reg.CloseKey;
reg.Free;
szz:=paramstr(1);
SendMessage(han, MY_MESSAGE,0,dword(pchar(szz)));
Exit;
end;

В форме этой программы, которой посылается сообщение:

 protected
 procedure MessageReceiver(var msg: TMessage); message MY_MESSAGE;

procedure tfstart.MessageReceiver(var msg: TMessage);
var s:pchar;
begin
s:=pchar(msg.LParam);
msg.Result:=1;
showmessage(s);
end;

Вот вопрос:
почему у меня в самой программе (проверял выводом сообщения, содержащего szz строка правильная, а после передачи в окно в lparam оказывается почему-то просто адрес исполняемого файла ?


 
Квэнди ©   (2007-01-29 18:37) [1]

Да, само собой что и в самой программе и в модуле формы определено:
const
  MY_MESSAGE = WM_USER + 4242;


 
MBo ©   (2007-01-29 18:55) [2]

У приложений разные адресные пространства
Используй сообщение WM_COPYDATA


 
Квэнди ©   (2007-01-29 19:00) [3]

Переписал:
в самой программе все тоже самое, но:
SendMessage(han, WM_COPYDATA,0,dword(pchar(szz)));
В модуле формы:
 protected
 procedure MessageReceiver(var msg: TMessage); message WM_COPYDATA;
procedure tfstart.MessageReceiver(var msg: TMessage);
var s:pchar;
begin
s:=pchar(msg.LParam);
msg.Result:=1;
showmessage(s);
end;
теперь вообще никакой реакции после отправки сообщения, т.е. оно вообще не "отлавливается"


 
Квэнди ©   (2007-01-29 19:08) [4]

Извиняюсь, совсем шарики заехали (
все заработало спасибо )

код вроде верный:

сама программа:
data:TCopyDataStruct;
with data do
begin
 dwData := 0;
 cbdata:=strlen(pchar(paramstr(1)))+1;
 lpData:=pchar(paramstr(1));
end;
SendMessage(han, WM_COPYDATA,application.Handle,longint(@data));

в модуле формы:
protected
procedure MessageReceiver(var msg: TWMCopyData); message WM_COPYDATA;

procedure tfstart.MessageReceiver(var msg: TWMCopyData);
var
sText: array[0..99] of Char;
begin
StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
showmessage(stext);
end;

Спасибо огромное за помощь.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.045 c
2-1170177129
Garacio
2007-01-30 20:12
2007.02.18
Поиск даты и слова в txt


15-1169959653
SerJaNT
2007-01-28 07:47
2007.02.18
Шаблонизатор TemplatePower


2-1169915126
Garacio
2007-01-27 19:25
2007.02.18
Отдельный поток


15-1170119218
hmmm
2007-01-30 04:06
2007.02.18
PHP


2-1170002397
Legolas
2007-01-28 19:39
2007.02.18
работа с несколькими объектами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский