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