![]() |
TStringList CustomSort
Hallo
Hab mal wieder ein kleines Problem und zwar: Ich habe eine Stringlist, in der sind Benutzernamen von Usern in nem IRC Channel, die je nach Rang ein bestimmtes Zeichen vor dem Namen haben (~ für Owner, & für Protected Op, @ für Op, % für Halfop, + für Voice). Nun hab ich die Stringlist sortieren lassen mit Sort, allerdings sind nun die mit % ganz oben, was nicht ganz der Rangordnung entspricht. Wie kann ich denn das am besten sortieren lassen mit der CustomSort? Hat da jemand nen Lösungsvorschlag? Ich steh da voll im Wald momentan :roll: |
Re: TStringList CustomSort
schreibe dir doch zur Not eine eigene Sortierfunktion?
Alternativ könntest du auch nur die Namen in der Stringliste speichern. Wenn ich mich richtig erinnere, kannst du zusätzlich auch Objekte in einer Stringlist speichern, wo du dann unter anderem auch den Status speichern kannst.
Delphi-Quellcode:
Ist nur nen symbolisches Beispiel, aber sollte in der Form machbar sein.
type
TStatus = class(TObject) private FRang: Byte public property Rang: Byte read FRang write FRang; end; ... procedure CreateUser; begin Users := TStringList.Create; end; procedure NewUser(Name: string; Rang: Byte) var uState: TStatus; begin uState := TStatus.Create; uState.Rang := Rang; Users.AddItem(Name, uState); end; procedure Sortieren; begin Users.Sort; end; |
Re: TStringList CustomSort
Du hast mich nicht richtig verstanden. Ich lese die Namen nur aus dem Channel aus, also ich muss keinen neuen User oder sowas anfügen. Die User sind mit Status in der Stringlist und sollen auch nach Status sortiert werden, deshalb sollen die Owner mit ~ ganz oben sein, dann die &, @, % und schlussendlich die mit + und vielleicht gibts auch noch welche ganz ohne Status, die sollen dann ganz unten sein. Also so wie in mIRC und anderen Clients...
|
Re: TStringList CustomSort
Hi killer,
die StringList stellt dir eine Methode CustomSort() zur Verfügung, die verwendest du so:
Delphi-Quellcode:
Grüße vom marabu
const
CRANKING = '+%@&~'; function CustomCompare(List: TStringList; Index1, Index2: Integer): Integer; var s1, s2: string; r1, r2: char; begin s1 := List[index1]; s2 := List[index2]; r1 := s1[1]; r2 := s2[1]; Delete(s1, 1, 1); Delete(s2, 1, 1); if Pos(r1, CRANKING) > Pos(r2, CRANKING) then Result := -1 else if Pos(r1, CRANKING) < Pos(r2, CRANKING) then Result := 1 else Result := AnsiCompareText(s1, s2); end; procedure TDemoForm.SortButtonClick(Sender: TObject); begin UserList.CustomSort(CustomCompare); ListBox.Items.Assign(UserList); end; |
Re: TStringList CustomSort
Danke werd ich gleich heute Abend mal ausprobieren! Danke :)
|
Re: TStringList CustomSort
Zitat:
Das hält dich aber nicht davon ab, die Benutzer in deiner eigenen Liste zu verwalten. |
Re: TStringList CustomSort
Ja schon, nur finde ich ist es für diesen Fall etwas overkill, aber trotzdem Danke für dein Lösungsvorschlag. Das einzige was ich mit dieser Stringlist mache, ist diese in eine ListBox zu schreiben und da sollte sie natürlich sortiert sein, deshalb das ganze.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz