Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - kleines Problem mit 'StringList.CustomSort()'


OliverN_26 - Do 15.10.09 04:50
Titel: kleines Problem mit 'StringList.CustomSort()'
Erst mal ein Hallo in die Runde,

also ... ganz fix erklärt.

Ich habe ein StringGrid und auf den Spalten der Zeile 0 (FixedRows=1) einen Sortieralgorithmus. Je nach click auf die Spaltenüberschrift wird dann die Spalte absteigend/aufsteigend sortiert. Funktioniert soweit alles perfekt .. bis auf eine Kleinigkeit.
Spalte 0 z.B. beinhaltet eine 'ID' (Integer) und die StringList wird textbasiert sortiert.
Somit kommt bei aufsteigender Sortierung die ID "10" vor der ID "1". Das is natürlich nich das was ich will.

Wie kann ich das ändern?
Hier bissl Quellcode:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// Die CustomSort-Funktion zum Sortieren
function Sortieren(List: TStringList; Index1, Index2: Integer): Integer;
begin
  if Absteigend1.Checked = true then
    if List[Index1] = List[Index2] then Result := 0 else
      if List[Index1] > List[Index2] then Result := -1 else
        if List[Index1] < List[Index2] then Result := 1;  

  if Aufsteigend1.Checked = true then
    if List[Index1] = List[Index2] then Result := 0 else
      if List[Index1] > List[Index2] then Result := 1 else
        if List[Index1] < List[Index2] then Result := -1;
  
end;




Delphi-Quelltext
1:
2:
// Der Aufruf aus einer Funktion heraus
MyList.CustomSort(Sortieren);


Wäre sehr nett wenn das jemand was zu wüsste.

Vielen Dank im voraus.

lg


mkinzler - Do 15.10.09 08:00

Du musst eine inhaltsbasierte Vergleichsfunktion schreiben (z.B. String aufteilen)


OliverN_26 - Do 15.10.09 16:32

aber wie mache ich das?
Ich blicke im moment noch nich so ganz wie ich den String zerlege und dann aber trotzdem noch die ganze Zeile vergleichen kann.

vielen Dank im voraus.