0

我正在编写一个拥有 Tlist of records 的自定义组件。问题是:用于对列表记录进行排序的 TListSortCompare 函数如何访问组件的字段?编译器拒绝对象方法作为列表比较器,并且在组件的单​​元中还没有创建实例来访问。

谢谢韦尔

4

1 回答 1

1

compare 函数不能是非静态类方法,它必须是独立函数或静态类方法,这意味着它没有Self参数可以直接访问任何组件对象,它只知道 2 个输入参数指向正在比较的记录。

因此,在比较函数中间接访问组件对象的唯一方法是:

  • 将指向组件对象的指针存储在全局或threadvar变量中。

  • 在记录本身内存储指向组件对象的指针。

  • 为比较器使用 thunk,其中指向组件对象的指针隐藏在 thunk 本身中(这是 VCL 在内部使用的技术,允许 Win32 HWND 消息处理程序TWinControl.WindowProc基于每个对象调用)。

于 2019-12-22T01:23:22.163 回答