可以访问对象属性的Delphi 7 TListSortCompare

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

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

谢谢
Wael

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

因此,间接访问compare函数中的component对象的唯一方法是:

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

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

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


你能给出一个你的问题的编码示例吗?雷米,是的,我想到的是一个静态变量,或者是指向对象的指针,或者只是我需要的字段。但我认为该值将影响会话中共存的组件的所有已创建实例,不是吗?@DrWael如果使用全局,则是。如果您在一个线程中使用所有这些实例,那么这就足够了。但是,如果您需要多线程支持,则不能选择全局支持。