不创建新类能override如timage类控件的wndproc过程吗?

stgsd 2007-11-23 01:52:32
不派生新类能override如timage类控件的wndproc过程吗?
...全文
62 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stgsd 2007-11-25
  • 打赏
  • 举报
回复
通过cpu调试,发现:call TForm1.NewWindowProc时
eax中是form1,
ebx中是触发的控件,
[esi]中是消息号。
begin后ebx中变成form1,所以我mov ebx [ebp-8]:
etomahawk 2007-11-24
  • 打赏
  • 举报
回复
不用全部重写。不处理的调用默认的过程处理不就OK了?

procedure TForm1.Button1Click(Sender: Tobject);
begin
FOldWndProc:= image1.WindowProc;
image1.WindowProc:= Form1.NewWindowProc;
end;

procedure TForm1.NewWindowProc(var AMsg: TMessage);
begin
if AMsg.Msg = WM_PAINT then
begin
//Process message
end
else if AMsg.Msg = WM_MOUSEMOVE then
begin
//Process message
end
else
FOldWndProc(AMsg); //Call default window process method
end;
stgsd 2007-11-24
  • 打赏
  • 举报
回复

原来最后一句是这么写的,受教了!!!
但怎么判断是哪个或哪类控件触发这个方法?self指针是form1?
amsg.lparam?
如果有sender,可以写timage(sender),现在该怎么做?
例如,现在有image1,image2两个的windowproc都指给了TForm1.NewWindowProc,
我现在要求单击任何一个image都让它的top改变,TForm1.NewWindowProc中怎么写?
stgsd 2007-11-23
  • 打赏
  • 举报
回复

type
Tmyimage=class(Timage)
public
procedure wndProc(var msg:TMessage);override
就象上面一样,我可以加入少量的东西。
stgsd 2007-11-23
  • 打赏
  • 举报
回复
TForm1.NewWindowProc里的东西都要自己写?
我只要自己处理数个消息,其他的继承,应该怎么写?
etomahawk 2007-11-23
  • 打赏
  • 举报
回复
可以。

procedure TForm1.NewWindowProc(var AMsg: TMessage);
begin
//New message process code
end;

procedure TForm1.Button1Click(Sender: Tobject);
begin
image1.WindowProc:= Form1.NewWindowProc;
end;

//===================================================//
看你发的子类化的那个帖子。已经回复了。这里不写了,刚看到。呵呵。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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