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