Delphi 7 TListSortCompare可以访问对象属性

问题描述 投票:0回答:1

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

谢谢Wael

delphi custom-controls delphi-7 tlist
1个回答
0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.