zoukankan      html  css  js  c++  java
  • delphi消息发送字符串

    delphi消息发送字符串


    其实不论什么方法,归根揭底都是通过传递对象的指针来达到效果的。
     
    方法一:
     
    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.delphitop.com/html/jiqiao/2170.html

  • 相关阅读:
    docker学习笔记3:镜像操作(查找和下载)
    docker学习笔记2:容器操作
    docker学习笔记1:docke环境的查看
    CSS鼠标样式
    Ubuntu下安装和配置mysql
    HR函数学习01——创建组织单位
    SAP模块常用增强总结{转载}
    SAP物料批次管理配置及操作手册(轉載)
    交货单开票
    ABAP之PINYING拼音
  • 原文地址:https://www.cnblogs.com/ziliudi/p/5070903.html
Copyright © 2011-2022 走看看