如何用sendmessage传递一个字符串,以及接受方该如何写,谢谢,在线等 如何用sendmessage传递一个字符串,以及接受方该如何写,谢谢,在线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 利用WM_COPYDATA消息实现程序间的数据传递 在实际应用中,我们经常需要多个程序相互配合来完成某些特定功能,这就需要利用数据传递来实现,利用WM_COPYDATA消息可以方便的解决这类问题。 使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员: dwData 是一个32位的附加参数 cbData 表示要传递的数据区的大小 lpData 表示要传递的数据区的指针 下面举例说明。该例子由两个程序构成,分别为SendData和GetData。 SendData程序向GetData程序发送消息,并传递edit1中的字符串;GetData在收到消息后,把SendData发送的字符串接受下来,并显示在相应的edit1中。 SendData程序: ……var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);var ds: TCopyDataStruct; hd: THandle;begin ds.cbData := Length(Edit1.Text) + 1; GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存 StrCopy(ds.lpData, PChar(Edit1.Text)); Hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄 if Hd <> 0 then SendMessage(Hd, WM_COPYDATA, Handle, Cardinal(@ds)) // 发送WM_COPYDATA消息 else ShowMessage('目标窗口没找到!'); FreeMem(ds.lpData); //释放资源end; GetData程序:TForm2 = class(TForm) Edit1: TEdit;private{ Private declarations }public procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA;{ Public declarations }end;var Form2: TForm2;implementationprocedure TForm2.Mymessage(var t: TWmCopyData);begin Edit1.text := StrPas(t.CopyDataStruct.lpData); //接受数据并显示。end; var s:string;begin s:='jinjazz'; sendmessage(edit1.Handle,wm_settext,0,integer(pchar(s)));end; 多线程问题 关闭模态窗体另外一个窗体标题会猛闪,求救.... DBGrid的问题。。access做数据库 谁有《Delphi深度历险》或《Delphi高手突破》? ADO連接sql server2000的問題!請高手指點。 哪位能否讲下delphi中关于pos和copy等含数的用法!!!用了这么久,但是概念很模糊。谢了!!! 请问那里有kodak图像编辑控件的使用文档或帮助 如何取得DBGrid中各个网格的值? 为什么只显示列标题不显示数据? 想学XE5,特别是移动开发,但相关资料太少了 有一组数据点,需要在这组数据的最小点(最底点)和最大点(最高点)之间连成一条曲线,如何作? 求救,求救!
在实际应用中,我们经常需要多个程序相互配合来完成某些特定功能,这就需要利用数据传递来实现,利用WM_COPYDATA消息可以方便的解决这类问题。
使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员:
dwData 是一个32位的附加参数
cbData 表示要传递的数据区的大小
lpData 表示要传递的数据区的指针
下面举例说明。该例子由两个程序构成,分别为SendData和GetData。
SendData程序向GetData程序发送消息,并传递edit1中的字符串;GetData在收到消息后,把SendData发送的字符串接受下来,并显示在相应的edit1中。
SendData程序:
……var Form1: TForm1;
implementation
{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
ds: TCopyDataStruct;
hd: THandle;
begin
ds.cbData := Length(Edit1.Text) + 1;
GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存
StrCopy(ds.lpData, PChar(Edit1.Text));
Hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄
if Hd <> 0 then
SendMessage(Hd, WM_COPYDATA, Handle,
Cardinal(@ds)) // 发送WM_COPYDATA消息
else
ShowMessage('目标窗口没找到!');
FreeMem(ds.lpData); //释放资源
end; GetData程序:
TForm2 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
procedure Mymessage(var t: TWmCopyData); message WM_COPYDATA;
{ Public declarations }
end;
var Form2: TForm2;
implementationprocedure
TForm2.Mymessage(var t: TWmCopyData);
begin
Edit1.text := StrPas(t.CopyDataStruct.lpData); //接受数据并显示。
end;
begin
s:='jinjazz';
sendmessage(edit1.Handle,wm_settext,0,integer(pchar(s)));
end;