定义了一个WM_GETTDATA 消息。我想在消息发送时传两个数据过去,在消息函数中处理,但是搞了半天也没搞定。
例如发送消息 
...
fwl := 1234;
fkr := 5500.6;
SendMessage(frmData.Handle,WM_GETTDATA,cardinal(@fwl),cardinal(@fkr));--------------------------------
消息处理函数里面
var 
  fwl : integer;
  fkr : single;
begin
  fwl := msg.wParam; // 想在这里得到传过来的值,但是不知道要怎能么转换
  fkr := msg.lParam;
end;

解决方案 »

  1.   

    // 1.
    type
        MyRecord = record
          Name: array[0..10] of char;
          ID:   array[0..18] of char;
          Age:  Integer;
        end;
        PMyRecord = ^MyRecord;
        
    const
      WM_START            = WM_USER;
      MY_UPDATE_LABLE_MSG = WM_START + 1;
      MY_RECORD_MSG       = WM_START + 2;// 2.
    procedure TSubFrm.BtnMsgRecClick(Sender: TObject);
    var
      Rec: MyRecord;
    begin
      StrCopy(Rec.ID,   PChar(EdtID.Text));
      StrCopy(Rec.Name, PChar(EdtName.Text));
      Rec.Age := StrToIntDef(EdtAge.Text, 1);
      SendMessage(LTopParentHwnd, MY_RECORD_MSG, 0, LPARAM(@Rec));
    end;// 3.
    procedure MyGetRecordMsg(var msg: TMessage); message MY_RECORD_MSG;procedure TMainFrm.MyGetRecordMsg(var msg: TMessage);
    var
      pRec: PMyRecord;
    begin
      pRec := PMyRecord(msg.LParam);
      Assert(pRec <> nil);
      EdtID.Text   := pRec.ID;
      EdtName.Text := pRec.Name;
      EdtAge.Text  := IntToStr(pRec.Age);
    end;
      

  2.   

    const
       WM_GetData=WM_user+100;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure WMGetData(var Msg:TMessage);message WM_GetData;
      end;var
      Form1: TForm1;implementation{$R *.dfm}
     procedure TForm1.WMGetData(var msg:TMessage);
     begin
           showmessage(inttostr((Pinteger(Msg.WParam))^));
            showmessage(inttostr((Pinteger(Msg.LParam))^));
     end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      fwl : integer;
      fkr :integer;
    begin
    fwl := 1234;
    fkr := 5500;
     Sendmessage(handle,WM_GetData,Longint(@fwl),LongInt(@fkr));
    end;