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