Delphi 7 TListSortCompare, который может получить доступ к свойствам объекта - PullRequest
0 голосов
/ 22 декабря 2019

Я пишу пользовательский компонент, которому принадлежит Tlist записей. проблема в том, как функция TListSortCompare, используемая для сортировки записей списка, может получить доступ к полям компонента? компилятор отказывается от метода объекта как компаратора списка, а в модуле компонента еще не создан экземпляр для доступа.

Спасибо Wael

1 Ответ

1 голос
/ 22 декабря 2019

Функция сравнения не может быть нестатическим методом класса, это должна быть либо отдельная функция, либо метод статического класса, что означает, что она не имеет параметра Self для прямого доступа для доступа к любомукомпонентный объект, он знает только о 2 входных параметрах, которые указывают на сравниваемые записи.

Таким образом, единственный способ для вас косвенно получить доступ к объекту компонента внутри вашей функции сравнения - это еслиВы либо:

  • сохраняете указатель на объект компонента в глобальной переменной или threadvar.

  • хранить указатель на объект компонента внутри самих записей.

  • использовать thunk для компаратора, где указатель на объект компонентахранится скрытым внутри самого блока (это метод, который VCL использует внутри, чтобы позволить обработчикам сообщений Win32 HWND вызывать TWinControl.WindowProc для каждого объекта).

...