delphi的消息机制(PostMessage)怎么实现字符串信息得传递? 请问,delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?WParam和LParam都是数值类型得。我是希望在一个窗口里得到某种信息,然后通过消息机制通知另一个窗口句柄获取信息。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var Str: String;begin Str := 'some string'; PostMessage(Handle, 0, 0, Integer(Str));end; 通常可以考虑: RegisterMessage,再SENDMESSAGE 我的就是同一个进程的,谢谢 chris_mao, 可是我该怎么获取呢?获取消息后,对应的字符串内存要不要释放呢?我看C++的好想要delete的 获取的时候就是一个逆操作,不用删除的。var Str: String;begin Str := String(Msg.LParam); ShowMessage(Str);end; 使用WM_COPYDATA传递.发送: procedure SendString(strMSG: string);var Data: tagCOPYDATASTRUCT; pBuf: PChar;begin GetMem(pBuf, Length(strMSG) + 1); try ZeroMemory(pBuf, Length(strMSG) + 1); StrPCopy(pBuf, strMSG); Data.cbData:= Length(strMSG); Data.dwData:= Length(strMSG); Data.lpData:= pBuf; SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data)); finally FreeMem(pBuf); end;end;接收: procedure WMCopyData(var MSG: TMessage); message WM_COPYDATA;procedure TForm1.WMCopyData(var MSG: TMessage);var Data : ^tagCOPYDATASTRUCT; strMSG: string;begin Data:= Pointer(Msg.lParam); strMSG:= StrPas(Data.lpData); ShowMessage(strMSG);end;没有调试,在回复框里直接写的,自己调试一下. delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?必须使用sendMessage.sendmessage会等待接受消息完成后才继续执行,这样你的str才会被另一个窗口可靠接收。postmessage传递完消息立即返回,这样接收窗口就不一定完全接收当时传递的str.尤其是在局部变量的情况。而进程间的数据传递好像只有用wm_copydata消息,它可以跨进程拷贝内存。 自学delphi没证书?不要? 一个DELPHI的小问题,求助 各位帮忙:如何用OLE 控制word的页面设置 有谁知道天网核新的数据格式吗? 怎么在delphi环境下执行一段sql语句? 如何调试delphi串口通讯的结果 哪里有 InstallSheild 下啊 DLL窗体与框架焦点问题 菜鳥問題:TActionManager如何使用,我怎麼在組件面板上找不到... 我是delphi的初学者,有问题,急救! 介绍一篇用 DELPHI 写外挂的文章。很详细!! 请教,delphi程序中如何调用Zebra打印机的ZPL指令,来打印条形码
Str: String;
begin
Str := 'some string';
PostMessage(Handle, 0, 0, Integer(Str));
end;
我看C++的好想要delete的
var
Str: String;
begin
Str := String(Msg.LParam);
ShowMessage(Str);
end;
var
Data: tagCOPYDATASTRUCT;
pBuf: PChar;
begin
GetMem(pBuf, Length(strMSG) + 1); try
ZeroMemory(pBuf, Length(strMSG) + 1);
StrPCopy(pBuf, strMSG); Data.cbData:= Length(strMSG);
Data.dwData:= Length(strMSG);
Data.lpData:= pBuf; SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data));
finally
FreeMem(pBuf);
end;
end;接收:
procedure WMCopyData(var MSG: TMessage); message WM_COPYDATA;procedure TForm1.WMCopyData(var MSG: TMessage);
var
Data : ^tagCOPYDATASTRUCT;
strMSG: string;
begin
Data:= Pointer(Msg.lParam); strMSG:= StrPas(Data.lpData); ShowMessage(strMSG);
end;没有调试,在回复框里直接写的,自己调试一下.
sendmessage会等待接受消息完成后才继续执行,这样你的str才会被另一个窗口可靠接收。postmessage传递完消息立即返回,这样接收窗口就不一定完全接收当时传递的str.尤其是在局部变量的情况。而进程间的数据传递好像只有用wm_copydata消息,它可以跨进程拷贝内存。