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

Ple*_*rds 3 delphi oop class helper

我想为TCustomQuery,TQuery,TTable等创建一个帮助器...使用LastRecordPosition属性,我将从OnBeforeScroll获取来自RecNo的该属性.

如何在该帮助程序类中创建该触发器以捕获事件而不会干扰用户的OnBeforePost(如果他/她需要)?

我使用FireDAC或ZeosLib用于旧版本.

Rem*_*eau 5

要在OnBeforeScroll不干扰用户OnBeforeScroll事件处理程序的情况下拦截事件,您需要覆盖每个组件的虚DoBeforeScroll()方法.但是,类助手不能覆盖它所帮助的类的任何虚方法.所以,你必须改为:

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

  2. (仅限XE及更高版本)使用Delphi的TVirtualMethodInterceptor类来挂钩DoBeforeScroll()特定组件对象实例的虚方法(而不是类本身),而无需编写任何派生类.

另一种方法是编写一个类,可能是一个Generic类,用户必须为每个组件对象实例实例化,然后该类可以将其关联的组件(可能与RTTI)子类化,以捕获和替换用户的OnBeforeScroll事件处理程序,然后它的事件处理程序可以在需要时调用用户的事件处理程序.