如何在 class 助手中捕获 class 的事件?

How to catch events of a class in a class helper?

我想为 TCustomQuery、TQuery、TTable 等创建一个帮助程序...使用 LastRecordPosition 属性,我将通过 OnBeforeScroll 设置从 RecNo 获得 属性。

如果 he/she 需要,我如何在该助手 class 中创建触发器以捕获事件而不干扰用户的 OnBeforePost?

我对旧版本使用 FireDAC 或 ZeosLib。

要在不干扰用户的OnBeforeScroll事件处理程序的情况下拦截OnBeforeScroll事件,您需要覆盖每个组件的虚拟DoBeforeScroll()方法。但是,class 助手 不能覆盖它正在帮助的 class 的任何虚拟方法。因此,您将不得不改为:

  1. 编写新的 classes 派生自每个要拦截的基本组件 class(type TMyCustomQuery = class(TCustomQuery) 等),然后用户必须使用这些新组件 classes 在他们的代码中而不是原来的代码中。

  2. (仅限XE及以后)使用Delphi的TVirtualMethodInterceptorclasshook特定组件对象实例的虚DoBeforeScroll()方法(不是 classes 本身)而不必编写任何派生的 classes.

另一种方法是编写一个 class,可能是一个通用 class,用户必须为每个组件对象实例实例化,然后 class 可以子class 其关联组件(可能带有 RTTI)捕获用户的 OnBeforeScroll 事件处理程序并将其替换为自己的事件处理程序,然后其事件处理程序可以在需要时调用用户的事件处理程序。