关于消息处理和自定义消息的问题

pwqzc 2004-12-23 05:05:57
我希望这样,自定义消息(记录类型);
const MyMessage=WM_USER+100;
Type
TMyMessage=record
s1:pchar;
s2:pchar;
end;
再在button的单击中把这条消息发送给form1,但是应该怎么样写呢?
s1:='dsjfh';
s2:='dsfjl';//要把这两个都放松出去啊
再处理这个消息,在label中把s1和s2的内容显示出来,要怎么样写呢?
我能够收到消息,但是就是不能够把传送来的s1和s2接收,当然可能是我没有传送相应的消息记录啊,请大家给我个例子好不?非常感谢
...全文
279 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstshine 2004-12-25
  • 打赏
  • 举报
回复
因为PostMessage需要一个整数类型的参数,所以要用Integer(MyMsg)把指针MyMsg强制转换成为整数;
MyMsg:=Pointer(msg.WParam)的意思是把原来转换成为整数的指针在转换回来成为指针;至于Dispose(MyMsg),他的意思是释放MyMsg变量所占的内存,因为我们原来用New申请了内存,用了之后应该释放所申请的内存,这应该是一个原则
pwqzc 2004-12-24
  • 打赏
  • 举报
回复
回答立即给分!!!
pwqzc 2004-12-24
  • 打赏
  • 举报
回复
很好啊,但是Integer(MyMsg)是什么意思呢?为什么要这样做呢?MyMsg:=Pointer(msg.WParam);又是什么意思呢?为什么Dispose(MyMsg);要放到DecodedDataMessage过程呢?
firstshine 2004-12-24
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

Const
MyMessage=WM_USER+100;
type
TMyMessage=record
s1:pchar;
s2:pchar;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure DecodedDataMessage(var msg:TMessage);message MyMessage;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
MyMsg:^TMyMessage;
begin
New(MyMsg);
MyMsg.s1:='dsjfh';
MyMsg.s2:='dsfjl';
PostMessage(Handle,MyMessage,Integer(MyMsg),0);
end;

procedure TForm1.DecodedDataMessage(var msg: TMessage);
var
MyMsg:^TMyMessage;
begin
MyMsg:=Pointer(msg.WParam);
showmessage('s1='+MyMsg.s1+' s2='+MyMsg.s2);
Dispose(MyMsg);
end;

end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧