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 在每个对象的基础上)。