AGB  ·  Datenschutz  ·  Impressum  







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

Stringgrid inkl. Umlaute richtig sortieren

Ein Thema von Steven2 · begonnen am 14. Jul 2007 · letzter Beitrag vom 8. Sep 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#1

Stringgrid inkl. Umlaute richtig sortieren

  Alt 14. Jul 2007, 09:59
Hallo...

wie kann ich ein Stringgrid alphabetisch sortieren,
so dass auch die Umlaute ordnungsgemäß sortiert werden?

Grüße
Steven
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 14. Jul 2007, 11:54
Zitat von Steven2:
so dass auch die Umlaute ordnungsgemäß sortiert werden?
Ordnungsgemäße Sortierung ist definitionssache. Welche Definition hast du dafür?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 14. Jul 2007, 19:32
So dachte ich mir das...
Umlaut:
Ä bei AE einsortieren
Ü bei UE einsortieren
Ö bei OE einsortieren

Beste Grüße
Steven
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 14. Jul 2007, 19:47
Moin Steven,

ohne Berücksichtigung der Gross-/Kleinschreibung kommt hier Delphi-Referenz durchsuchenAnsiCompareText in Frage.
Da ich mal davon ausgehe, dass das StringGrid mehrere Spalten umfasst, müsstest Du allerdings die Sortierroutine selber schreiben, damit alle Zeilen erhalten bleiben.
Bei einem ListView wäre das etwas einfacher.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 14. Jul 2007, 20:02
Zitat von Steven2:
Hallo...

wie kann ich ein Stringgrid alphabetisch sortieren,
so dass auch die Umlaute ordnungsgemäß sortiert werden?

Grüße
Steven
Hallo,

soweit ich weiss, ist sowas nur in Datenbanksoftware standardmässig verfügbar. Um selbst nach DIN zu sortieren, musst du Kopien der Strings anlegen, weil du vor dem Vergleich ä durch ae ... ß durch ss usw. ersetzen musst und der Ausgangsstring dabei theoretisch doppelt so lang werden kann.

Darüber hinaus sind in der DIN glaube ich noch ein paar Feinheiten definiert wie die genaue Sortierreihenfolge von AE,Ae,aE,ae, aber man kann es ja auch übertreiben. In der EDV ist es üblich, Gross/Klein überhaupt nicht zu beachten.

Gruss Reinhard
  Mit Zitat antworten Zitat
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 15. Jul 2007, 01:31
Irgendwie müsste es sowas wie hier sein, arbeite auch mit den TMS Kompos TadvStringgrid:
Natürlich muss der Code anders aussehen, evt. wäre das aber eine Möglichkeit.
Hab selber keinen Plan, ist nur mal so geraten.

Delphi-Quellcode:
procedure TForm1.AdvStringGrid1CustomCompare(Sender: TObject; str1,
  str2: String; var res: Integer);
var
  i1,i2,code:integer;

begin
  if (pos('Kb',str1)>0) then
  begin
    Delete(str1,Pos('Kb',str1),2);
    Val(str1,i1,code);
    i1 := i1 * 1024;
  end
  else
    Val(str1,i1,code);

  if (pos('Kb',str2)>0) then
  begin
    Delete(str2,Pos('Kb',str2),2);
    Val(str2,i2,code);
    i2:=i2*1024;
  end
  else
    Val(str2,i2,code);

  if i1 = i2 then
    res := 0
  else
  begin
    if i1 > i2 then
      res := 1
    else
      res := -1;
  end;
end;
Hätte ich doch besser eine Listview nehmen sollen, mißt nun ist das Programm fertig.
^^
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 15. Jul 2007, 01:56
Moin Steven,

ich kenne TadvStringgrid nicht, aber so wie die Sort-Routine aussieht dürfte sich das recht leicht einbauen lassen.
So müsste das genügen:

Delphi-Quellcode:
procedure TForm1.AdvStringGrid1CustomCompare(Sender: TObject; str1,
  str2: String; var res: Integer);
begin
  res := AnsiCompareText(str1,str2);
  if res < 0 then begin
    res := -1;
  end else begin
    if res > 0 then begin
      res := 1;
    end;
  end;
end;
Ich weiss jetzt nicht, ob AnsiCompareText evtl. garantiert auch -1,0 und 1 zurückgibt.
Für den Fall könnte man dann auch die ganze if/then/else-Konstruktion auch weglassen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 15. Jul 2007, 09:47
Guten Morgen Steven.

Das Ereignis OnCustomCompare() wird nicht unbedingt benötigt.

Wenn du beim Ereignis OnGetFormat() die richtigen Angaben zu den einzelnen Spalten machst, dann sortiert das AdvStringGrid wie von selbst. Ich gehe von nicht-virtualisierten Zellinhalten aus:

Delphi-Quellcode:
const // edit
  SIZE_SUFFIX = ' Kb'; // Anpassen!
  SIZE_COLINDEX = 3; // Anpassen!

procedure TDemoForm.AdvStringGridGetFormat(Sender: TObject; ACol: Integer;
  var AStyle: TSortStyle; var aPrefix, aSuffix: String);
begin
  with Sender as TAdvStringGrid do
    case ACol of // edit
      SIZE_COLINDEX: // edit
      begin
        AStyle := ssNumeric;
        aSuffix := SIZE_SUFFIX;
      end;
    else
      AStyle := ssAnsiAlphaNoCase; // edit
    end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  with AdvStringGrid do
    SortByColumn(SIZE_COLINDEX);
end;
Getippt und nicht getestet.

EDIT:

(1) resourcestring durch const ersetzt: wegen SIZE_COLINDEX
(2) case selector vereinfacht
(3) erstes case label korrigiert: Konstante statt Literal
(4) sort mode umgestellt: ssAlphabetic kennt keine lokalisierten strings

Grüße vom marabu
  Mit Zitat antworten Zitat
Steven2

Registriert seit: 17. Nov 2006
94 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 15. Jul 2007, 17:50
Dankeschön für eure Hilfe.

Gilt das dann für alle Spalten?

Delphi-Quellcode:
procedure TDemoForm.AdvStringGridGetFormat(Sender: TObject; ACol: Integer;
  var AStyle: TSortStyle; var aPrefix, aSuffix: String);
begin
  with Sender as TAdvStringGrid do
    case ACol - FixedCols of
      1:
      begin
        AStyle := ssNumeric;
        aSuffix := SIZE_SUFFIX;
      end;
    else
      AStyle := ssAlphabetic;
    end;
end;
...oder muss ich
Delphi-Quellcode:
  with AdvStringGrid do
    SortByColumn(SIZE_COLINDEX);
für jede Spalte extra anlegen?
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid inkl. Umlaute richtig sortieren

  Alt 15. Jul 2007, 19:11
Hallo Steven,

jetzt habe ich meinen Code-Vorschlag mal getestet. Achte bitte auf meine Änderungen im Beitrag #8.

Beim Ereignis OnGetFormat() habe ich nur für eine Spalte spezielle Vorkehrungen getroffen. Wenn du mehrere solche Spalten hast, dann musst du weitere case label einfügen.

Die Sortierung habe ich der Einfachheit halber nur für eine Spalte und per Button gezeigt. Du wirst in deinem Code sicher auf das Klicken auf einen Spaltenkopf reagieren um die Sortierung zu wechseln. Oder du hast sogar mehr als eine Spalte als Sortierkriterium.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 20: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