请问,delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?WParam和LParam都是数值类型得。我是希望在一个窗口里得到某种信息,然后通过消息机制通知另一个窗口句柄获取信息。

解决方案 »

  1.   

    var
      Str: String;
    begin
      Str := 'some string';
      PostMessage(Handle, 0, 0, Integer(Str));
    end;
      

  2.   

    通常可以考虑: RegisterMessage,再SENDMESSAGE
      

  3.   

    我的就是同一个进程的,谢谢 chris_mao, 可是我该怎么获取呢?获取消息后,对应的字符串内存要不要释放呢?
    我看C++的好想要delete的
      

  4.   

    获取的时候就是一个逆操作,不用删除的。
    var
      Str: String;
    begin
      Str := String(Msg.LParam);
      ShowMessage(Str);
    end;
      

  5.   

    使用WM_COPYDATA传递.发送: 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;没有调试,在回复框里直接写的,自己调试一下.
      

  6.   

    delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?必须使用sendMessage.
    sendmessage会等待接受消息完成后才继续执行,这样你的str才会被另一个窗口可靠接收。postmessage传递完消息立即返回,这样接收窗口就不一定完全接收当时传递的str.尤其是在局部变量的情况。而进程间的数据传递好像只有用wm_copydata消息,它可以跨进程拷贝内存。