gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:49:48 26 4
gpt4 key购买 nike

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

如果用户需要的话,如何在该帮助程序类中创建触发器来捕获事件而不干扰用户的 OnBeforePost?

对于旧版本,我使用 FireDAC 或 ZeosLib。

最佳答案

要拦截 OnBeforeScroll 事件而不干扰用户的 OnBeforeScroll 事件处理程序,您需要重写每个组件的虚拟 DoBeforeScroll() 方法。但是,类帮助器不能重写它所帮助的类的任何虚拟方法。因此,您必须改为:

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

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

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

关于class - 如何在类助手中捕获类的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36852143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com