Hallo,
ich habe mir für mein Programm, das eine Art Adressbuch werden soll, das Thema zur Listensortierung(
TList.Sort akzeptiert Vergleichsfunktion nicht) angeshaut und die Methode übernommen. Jetzt stimmt aber was bei meiner Vergleichsunktion nicht. Erstmal der Code:
Delphi-Quellcode:
type
TMyListSortCompare = function(Item1, Item2: Pointer): Integer of Object;
TDirectory = class
private
fEntryList: TList;
fCompareListItems: TMyListSortCompare;
public
constructor Create;
function CompareListItems(Item1, Item2: Pointer): Integer;
procedure AddEntry(Entry: TEntry);
procedure Sort;
end;
implementation
constructor TDirectory.Create;
begin
inherited;
fEntryList:=TList.create;
fCompareListItems:=CompareListItems;
end;
procedure TDirectory.AddEntry(Entry: TEntry);
begin
fEntryList.Add(Entry);
ShowMessage('Item added (' + Entry.LastName + ')');
end;
function TDirectory.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(TListSortCompare(@fCompareListItems));
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;
Die Vergleichsfunktion wird akzeptiert, jedoch kriege ich beim Aufrufen der Methode eine
Exception (
Access violation). Beim Debuggen ist mir aufgefallen, dass man schon beim ersten Durchlauf nicht auf tmpEntry2 zugreifen kann (
Inaccessable Value). tmpEntry1 erscheint mit den eingegebenen Werten, also ganz normal. Durch das Fehlen von tmpEntry2 hat sich der Rest natürlich erübrigt...
Weiß jemand, was ich da verbockt haben könnte?