1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure Sortiere(sg1:TStringGrid); var punkt:array of string; wechsel,i,j,maxi:integer; function su(such:string):integer; var i:integer; begin su:=0; for i:=1 to sg1.ColCount-1 do if copy(sg1.Cells[i,0],1,length(such))=such then su:=i; end;
begin maxi:=0; setLength(punkt,sg1.ColCount); for i:=1 to sg1.RowCount-1 do if alsD(sg1.Cells[su('St'),i])<>0 then inc(maxi); repeat wechsel:=0; for i:=maxi downto 1 do if alsD(sg1.Cells[su('Station'),i-1])>alsD(sg1.Cells[su('Station'),i]) then begin for j:=1 to sg1.ColCount-1 do punkt[j]:=sg1.Cells[j,i-1]; for j:=1 to sg1.ColCount-1 do sg1.Cells[j,i-1]:=sg1.Cells[j,i]; for j:=1 to sg1.ColCount-1 do sg1.Cells[j,i]:=Punkt[j]; inc(wechsel); end; until wechsel=0; sg1.SetFocus; end; |
Habe ein älteres Beispiel gefunden, vielleicht hilft es ja. Hier sortiere ich die Zahlen in Spalte 1 aufsteigend, so daß ihre Zeilen aber erhalten bleiben.
Delphi-Quelltext
1:
| alsD(sg1.Cells[su('Station'),i]) |
alsD ist eine Function wie FloatToStr
su (oben zu sehn) ist der "Spaltenfinder" , der String dahinter ist in der fixen Zeile der Spaltenkopf. (Falls User Spalten verschieben werden die trotzdem gefunden, es reichen auch nur wenige Anfangsbuchstaben, die nicht nochmals vorkommen = su('St') wäre das Gleiche)
Gruß Jürgen
P.S. Natürlich gibt es weitaus schnellere, kompliziertere und bessere Sortieralgo's, aber der Part ist einfach nachzuvollziehen und stammt aus der Zeit, als ich das Forum noch nicht kannte

Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"