Delphi 7 可以访问对象属性的TListSortCompare
Delphi 7 TListSortCompare that can access object properties
我正在编写一个拥有记录 Tlist 的自定义组件。问题是:TListSortCompare 函数(用于对列表的记录进行排序)如何访问组件的字段?
编译器拒绝将对象方法作为列表比较器,并且在组件的单元中还没有创建实例来访问。
谢谢
威尔
比较函数不能是非静态class方法,它必须是独立函数或静态class方法,这意味着它没有Self
参数直接访问任何组件对象,它只知道指向被比较记录的2个输入参数。
因此,您间接访问比较函数中的组件对象的唯一方法是:
将指向组件对象的指针存储在全局或 threadvar
变量中。
在记录本身中存储指向组件对象的指针。
为比较器使用一个 thunk,其中指向组件对象的指针隐藏在 thunk 本身内部(这是 VCL 在内部使用的技术,允许 Win32 HWND 消息处理程序调用 TWinControl.WindowProc
在每个对象的基础上)。
我正在编写一个拥有记录 Tlist 的自定义组件。问题是:TListSortCompare 函数(用于对列表的记录进行排序)如何访问组件的字段? 编译器拒绝将对象方法作为列表比较器,并且在组件的单元中还没有创建实例来访问。
谢谢 威尔
比较函数不能是非静态class方法,它必须是独立函数或静态class方法,这意味着它没有Self
参数直接访问任何组件对象,它只知道指向被比较记录的2个输入参数。
因此,您间接访问比较函数中的组件对象的唯一方法是:
将指向组件对象的指针存储在全局或
threadvar
变量中。在记录本身中存储指向组件对象的指针。
为比较器使用一个 thunk,其中指向组件对象的指针隐藏在 thunk 本身内部(这是 VCL 在内部使用的技术,允许 Win32 HWND 消息处理程序调用
TWinControl.WindowProc
在每个对象的基础上)。