Zitat von
everdream:
Weiß jemand, was ich da verbockt haben könnte?
Nicht du, sondern omata im verlinkten Beitrag. Ich behaupte hier einfach mal, dass das verlinkte Ergebnis nicht klappen kann. Es ist immernoch der gleiche Fehler wie im verlinkten Beitrag.
Da Delphi recht typensicher ist, erkennt er richtigerweise, dass dies keine gültige Sortierroutine ist. Dies ist auch vollkommen richtig so. Der verlinkte Beitrag umgeht die Typprüfung einfach, behebt aber nicht den Grund für die Inkompatiblität. Die Lösung kann auch definitiv nicht klappen, da die Sortierroutine immernoch kein Self Parameter übergibt auf Aufruf. Damit verrutschen die Parameter und damit ist Item2 das eigentliche Item1 und Items1 ist deine Instanzenklasse - aber das willst du nicht haben.
Schlussendlich zu deinem Problem:
Delphi-Quellcode:
type
TDirectory = class
private
fEntryList: TList;
public
constructor Create;
procedure AddEntry(Entry: TEntry);
procedure Sort;
end;
implementation
constructor TDirectory.Create;
begin
inherited;
fEntryList:=TList.create;
end;
procedure TDirectory.AddEntry(Entry: TEntry);
begin
fEntryList.Add(Entry);
ShowMessage('Item added (' + Entry.LastName + ')');
end;
function CompareListItems(Item1, Item2: Pointer): Integer;
var
tmpEntry1, tmpEntry2: TEntry;
tmpText1, tmpText2: string;
begin
tmpEntry1:=TEntry(Item1);
tmpEntry2:=TEntry(Item2); //Beim ersten Durchlauf Inaccessable Value
tmpText1:=tmpEntry1.LastName;
tmpText2:=tmpEntry2.LastName;
Result := CompareText(tmpText1, tmpText2);
end;
procedure TDirectory.Sort;
begin
try
fEntryList.Sort(CompareListItems);
ShowMessage('Items sorted: ' + TEntry(fEntryList.Items[0]).LastName //Zu Testzwecken füge ich am Anfang 4 Einträge ein...
+ TEntry(fEntryList.Items[1]).LastName
+ TEntry(fEntryList.Items[2]).LastName
+ TEntry(fEntryList.Items[3]).LastName);
except
ShowMessage('Items not sorted');
end;
end;