Wenn ich für Index1 = 0 bei Result +1 und bei Index2 = 0 bei Result -1 angebe, gibt's ein Fehler "Listenindex außerhalb des gültigen Bereichs". Aber so wie oben geht es. Würde aber gerne wissen, warum andersrum ein Fehler kommt. Damit ich's halt verstehe mit diesem CustomSort.
Deine Sort1-Funktion ist ja nur die Vergleichsfunktion. Der Fehler dürfte aber in der eigentlichen Sortierfunktion geworfen werden, d.h. du müsstest dir diese mal im Konzert mit deiner Funktion anschauen, dann sollte es klar werden, denke ich.
Bei "-AnsiCompareText(List[Index1],List[Index2])" hatte er den Fehler verursacht.
Ich habe jetzt jedenfalls gemerkt, dass in Index2 nie 0 ankommt, wenn zuvor "if Index1=0 then Result := -1;" angegeben wird. Also mit dieser einzigen Zeile scheint es zu gehen. Aber ich verstehe es noch nicht so ganz, da z.B. ein "if Index1=1 then Result := -1;" die Anwendung einfriert (Keine Rückmeldung). Das dürfte doch gar nicht passieren? Es kommt dann wohl mit "AnsiCompareText" in Konflikt. Die Funktion wird ja je nach Inhaltsgröße der StringList mehrmals aufgerufen.
Es geht jedenfalls so:
Code:
Function Sort1(List: TStringList; Index1, Index2: Integer): Integer;
Begin
Result := 0;
If Assigned(List) Then
Begin
If TMStringList(List).SortUp = 0
Then Result := -AnsiCompareText(List[Index1],List[Index2])
Else Result := AnsiCompareText(List[Index1],List[Index2])
End;
// hinzugefügt damit der erste Eintrag trotz CustomSort immer oben bleibt
if Index1 = 0 then Result := -1;
End;
Aber ob's dann immer so passt? Die StringList hat ja nicht immer gleiche Inhalte. Und wie gesagt, prüfe ich "Index1 = 1" anstatt 0, macht die Anwendung Dauer-Urlaub.
@haentschman
Ich müsste wohl viel ändern im Source, wenn ich's in TList umbauen würde
Wollt das mit ner TStringList schon so behalten
Michael