Hallo berens,
TList.Sort erwartet einen Zeiger auf eine einfache (nicht lokale) Funktion, keine Methode.
Versuche es einmal mit diesen Änderungen:
Delphi-Quellcode:
// TMyListSortCompare = function (Item1, Item2: Pointer): Integer of object; // nicht mehr benötigt
TBar= class(TMyPanel)
private
public
ID: integer;
intSort: integer;
:
end;
Tfoo= class(TMyPanel)
private
// FCompareListItems:TMyListSortCompare; // ersetzt
FCompareListItems:TListSortCompare; // neu
// function CompareSortID(Item1, Item2: Pointer): Integer; // nicht mehr benötigt
:
public
ComponentList: TComponentList;
:
constructor Create(_Owner: TComponent); override;
end;
// neu (ersetzt alte Methode)
function CompareSortID(Item1, Item2: Pointer): Integer;
begin
if Assigned(Item1) and Assigned(Item2) then
Result := TBar(Item1).intSort - TBar(Item2).intSort
else
Result := 0;
end;
constructor Tfoo.Create(_Owner: TComponent);
begin
inherited Create(_Owner);
:
ComponentList := TComponentList.Create(True);
FCompareListItems:= CompareSortID;
:
end;
{ durch neue Routine ersetzt
function Tfoo.CompareSortID(Item1, Item2: Pointer): Integer;
begin
if not Assigned(Item1) or not Assigned(Item2) then begin
Result := 0;
Exit;
end;
if (TBar(Item1).intSort < TBar(Item2).intSort) then begin
Result := -1; // i1 < i2
end else begin
if (TBar(Item1).intSort = TBar(Item2).intSort) then begin
Result := 0; // i1 = i2
end else begin
Result := 1; // i1 > i2
end;
end;
end;
}
procedure Tfoo.Sort;
begin
if ComponentList.Count > 1 then begin
// ComponentList.Sort(TListSortCompare(@FCompareListItems)); // ersetzt
ComponentList.Sort(FCompareListItems); // neu
end;
end;
Gruß Hawkeye