您的位置:首页 > 其它

消息发送字符串

2016-03-02 23:28 211 查看
其实不论什么方法,归根揭底都是通过传递对象的指针来达到效果的。

方法一:

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;

方法二:

TMyRecord=record s:string; end;

tt:TMyRecord;

var tt:TMyRecord; begin tt.s:='s2343243'; PostMessage(handle,WM_My,integer(tt),5); end;
发送消息,由于参数只能是一个integer,你这样发只能发4个字节,所以要改成发指针,比如:
var tt:TMyRecord; begin tt.s:='s2343243'; PostMessage(handle,WM_My,integer(@tt),5); end;
接收的时候当然也不能用原来的方法:My:=TMyRecord(msg.WParam);这样取回来了,也要把TMyRecord声明成指针:

type PMyRecord=^TMyRecord; var My:PMyRecord; my:=PMyRecord(msg.WParam);
http://www.cnblogs.com/hnxxcxg/archive/2012/03/03/2378023.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: