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!