delphi – 如何从表单外部捕获表单的某些事件?
发布时间:2020-12-15 04:15:30 所属栏目:大数据 来源:网络整理
导读:我正在研究需要监控多种形式的东西.从表单外部,并且不在表单中放置任何代码,我需要以某种方式从这些表单中捕获事件,最有可能以 Windows消息的形式.但是你如何捕获与它相关的类外的Windows消息? 我的项目有一个对象,它包装了它正在监视的每个表单,我认为这个
我正在研究需要监控多种形式的东西.从表单外部,并且不在表单中放置任何代码,我需要以某种方式从这些表单中捕获事件,最有可能以
Windows消息的形式.但是你如何捕获与它相关的类外的Windows消息?
我的项目有一个对象,它包装了它正在监视的每个表单,我认为这个处理将进入这个对象.基本上,当我创建一个我想要监视的表单时,我创建了一个相应的对象,然后将其添加到所有已创建表单的列表中.最重要的是,当该表单关闭时,我必须知道所以我可以从列表中删除此表单的包装器对象. 这些活动包括: >最小化 我不想要的: >此处理的任何表单或表单单元内的任何代码 我想要的是: >处理这些事件的Windows消息 问题用相同的信息重写,但方法不同 解决方法
以下是David提供的解决方案的更完整示例:
private { Private declarations } SaveProc : TWndMethod; procedure CommonWindowProc(var Message: TMessage); ... procedure TForm1.Button1Click(Sender: TObject); var f : tForm2; begin f := tForm2.Create(nil); SaveProc := f.WindowProc; f.WindowProc := CommonWindowProc; f.Show; end; procedure TForm1.CommonWindowProc(var Message: TMessage); begin case Message.Msg of WM_SIZE : Memo1.Lines.Add('Resizing'); WM_CLOSE : Memo1.Lines.Add('Closing'); CM_MOUSEENTER : Memo1.Lines.Add('Mouse enter form'); CM_MOUSELEAVE : Memo1.Lines.Add('Mouse leaving form'); // all other messages will be available as needed end; SaveProc(Message); // Call the original handler for the other form end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |