• 消息发送字符串


    其实不论什么方法,归根揭底都是通过传递对象的指针来达到效果的。

    方法一:

    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

  • 相关阅读:
    金融新手投标模块布局小Demo
    jQuery序列化Ajax提交表单
    javascript实现jsonp跨域问题+原理
    javascript返回顶部插件+源码
    mime中间件
    移动端meta标签的设置
    Node环境下实现less编译
    diogo谈框,仿prompt()方法布局
    linux驱动程序框架基础
    C/C++下Netbeans的配置
  • 原文地址:https://www.cnblogs.com/findumars/p/5236967.html
Copyright © 2020-2023  润新知