消息发送字符串
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
方法一:
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
相关文章推荐
- jstl fortokens 分割字符串
- 文章标题
- 【C#】基础知识—数组
- 工厂模式
- main函数的参数
- cf 625 C. K-special Tables (打表+规律)
- 两个netfilter的例子 http://blog.csdn.net/CaspianSea/article/details/43730021
- 关于延迟时间的一点智慧
- iOS_SN_UITableView的优化
- 7天 搞定 ASP.NET MVC - 第3天
- fedora23 双系统 修改系统启动顺序
- java小小工具第四弹 计算器(括号运算)
- 剩余定理
- 文件分割合并
- 表达式的副作用解释【引用】
- Ember Debug Adapter (ISA3) --- Feature
- 装饰器模式
- C#之使用委托查找任意单一类型数组的最大值
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
- 2.6.30内核Netfilter的简单例子、一(DropAll) http://blog.csdn.net/sahusoft/article/details/4540886