Thema: Delphi StringGrid sortieren

Einzelnen Beitrag anzeigen

Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#5

Re: StringGrid sortieren

  Alt 7. Jul 2007, 13:38
Jetzt nochmal die CompareFunktion mit Sortierrichtung:
Delphi-Quellcode:
var col,dir: integer; //aufsteigend: dir=1, absteigend: dir=-1
function CompareStringGridRows(item1,item2: Pointer):integer;
var c1,c2: ^char;
    n1,n2: integer;
begin
  c1 :=@TStrings(item1).Strings[col][1];
  c2 :=@TStrings(item2).Strings[col][1];
  while (c1^ <>#0) and (c2^ <>#0) do
  begin
    if ((c1^ in ['0'..'9']) and (c2^ in ['0'..'9'])) then
    begin
      n1 :=0;
      n2 :=0;
      while (c1^ in ['0'..'9']) do
      begin
        n1 :=n1*10+ord(c1^)-ord('0');
        inc(c1);
      end;
      while (c2^ in ['0'..'9']) do
      begin
        n2 :=n2*10+ord(c2^)-ord('0');
        inc(c2);
      end;
      if n1 > n2 then
      begin
        result :=dir;
        exit
      end
      else if n1 < n2 then
      begin
        result :=dir*-1;
        exit;
      end;
    end
    else //at least one is not a number
    begin
      if c1^ > c2^ then
      begin
        result :=dir;
        exit;
      end
      else if c1^ < c2^ then
      begin
        result :=dir*-1;
        exit;
      end;
      inc(c1);
      inc(c2);
    end;
  end;
  if c1^ =#0 then
  begin
    if c2^ =#0 then result :=0
    else result :=dir*-1;
  end
  else result :=dir;
end;
Das blöde ist: wieder eine globale Variable mehr

EDIT: Position von dem inc(c1)/c2 korrigiert
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat