AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList CustomSort

Ein Thema von Killer · begonnen am 17. Okt 2005 · letzter Beitrag vom 17. Okt 2005
Antwort Antwort
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#1

TStringList CustomSort

  Alt 17. Okt 2005, 10:01
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
  Mit Zitat antworten Zitat
Unplugged

Registriert seit: 14. Apr 2004
Ort: Leipzig
125 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: TStringList CustomSort

  Alt 17. Okt 2005, 10:33
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:
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;
Ist nur nen symbolisches Beispiel, aber sollte in der Form machbar sein.
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: TStringList CustomSort

  Alt 17. Okt 2005, 10:36
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...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TStringList CustomSort

  Alt 17. Okt 2005, 10:44
Hi killer,

die StringList stellt dir eine Methode CustomSort() zur Verfügung, die verwendest du so:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: TStringList CustomSort

  Alt 17. Okt 2005, 10:57
Danke werd ich gleich heute Abend mal ausprobieren! Danke
  Mit Zitat antworten Zitat
Unplugged

Registriert seit: 14. Apr 2004
Ort: Leipzig
125 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: TStringList CustomSort

  Alt 17. Okt 2005, 12:06
Zitat von Killer:
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...
das hab ich schon richtig verstanden.
Das hält dich aber nicht davon ab, die Benutzer in deiner eigenen Liste zu verwalten.
  Mit Zitat antworten Zitat
Killer

Registriert seit: 11. Nov 2003
152 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: TStringList CustomSort

  Alt 17. Okt 2005, 12:10
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz