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

Вниз

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

 
Квэнди ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
1-1166871574
kroner
2006-12-23 13:59
2007.02.18
Почему FindFirst возвращает не ноль?


15-1169634716
Ega23
2007-01-24 13:31
2007.02.18
знатоки Sybase PowerDesigner - отзовитесь!


15-1169624052
Hero
2007-01-24 10:34
2007.02.18
Помогите найти компонет типа richedit но с вставкой битмапов


2-1170252473
m_a_x
2007-01-31 17:07
2007.02.18
фокусировка в ListBox1


2-1170421656
DelphiLexx
2007-02-02 16:07
2007.02.18
Очистить RxSpeedButton.Glyph программно