Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 如何从表单外部捕获表单的某些事件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究需要监控多种形式的东西.从表单外部,并且不在表单中放置任何代码,我需要以某种方式从这些表单中捕获事件,最有可能以 Windows消息的形式.但是你如何捕获与它相关的类外的Windows消息?

我的项目有一个对象,它包装了它正在监视的每个表单,我认为这个处理将进入这个对象.基本上,当我创建一个我想要监视的表单时,我创建了一个相应的对象,然后将其添加到所有已创建表单的列表中.最重要的是,当该表单关闭时,我必须知道@R_538_9447@从列表中删除此表单的包装器对象.

这些活动包括:

>最小化
>最大化
>恢复
>关闭
>聚焦进/出

我不想要的:

>此处理的任何表单或表单单元内的任何代码
>从任何自定义基本表单继承表单
>使用表单的事件(如OnClosE),因为它们将用于其他目的

我想要的是:

>处理这些事件的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;

大佬总结

以上是大佬教程为你收集整理的delphi – 如何从表单外部捕获表单的某些事件?全部内容,希望文章能够帮你解决delphi – 如何从表单外部捕获表单的某些事件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。