如何让自己定义的控件接收,自己定义的消息. ( 积分: 100 )

  • 主题发起人 主题发起人 emitsong
  • 开始时间 开始时间
E

emitsong

Unregistered / Unconfirmed
GUEST, unregistred user!
如:我在form中动态的生成4个控件,3个img类似Timage(继承),一个btn类似TButton(继承),我要点击btn,让img换张图片,因为是动态生成的所以希望btn.onclick 里只用写sentmessage(),或postmessage(),就能完成.
静态的很简单,不想大家浪费时间,主要想知道如何写控件中的自定义消息,和如何发送和接收这些消息
 
如:我在form中动态的生成4个控件,3个img类似Timage(继承),一个btn类似TButton(继承),我要点击btn,让img换张图片,因为是动态生成的所以希望btn.onclick 里只用写sentmessage(),或postmessage(),就能完成.
静态的很简单,不想大家浪费时间,主要想知道如何写控件中的自定义消息,和如何发送和接收这些消息
 
const
//自军定义消息;
MSG_MYMSG = WM_USER + 100;
然后在你的控件中
TMyimage = class(Timage)

private

XXX :string;
procedure WndProc(var Message: TMessage); message MSG_MYMSG;
end;
implementation

{ TMyimage }
procedure TMyimage.WndProc(var Message: TMessage);
begin
if Message.Msg = MSG_MYMSG then
begin
if Message.WParam=1 then
begin
在这里 可以跟据消息内容来图片 .......
end
else
begin
......
end;
end;
end;

发送消息时,可以这样:
PostMessage(XXXHandle, MSG_MYMSG, 1, 1);
不过好像Timage 是没有handle 的,你可以在Tmyimage内加一个带handle的东西。
 
sentmessage(),或postmessage(), 就能完成?
不能。你的image 不是 TWinControl, 没有handle 怎样接受消息?

const
cmuser = wm_user +1;
..
TmyImage = class(TImage)
procedure cmuser(var msg: Tmessage); message cmuser;

....

procedure TmyImage.cmuser(var msg: Tmessage);
begin

//在这里写代码;
end;


用 perform, 不用 sendmessage, postmessage, 因为没有handle
 
如果只是让自己接收的话 完全可以用事件代替 除非你的程序要给外部程序调用
 
后退
顶部