Autor Beitrag
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 18:16 
hallo,
ich habe ein paar Probleme/fragen zu dem tstringgrid:

:arrow: ich möchte das Tstringgrid scrollen. Dabei sind mir aber diese scrollbars zu hässlich. Kann man auf einem anderem Weg die Komponente scrollen???
:arrow: Der user soll mehrere zeilen markieren können und den text in einer zelle ändern können. bei mir will das nicht funzen wenn dann das eine oder das andere? Warum?
:arrow: kann man ein tstringgrid mit einer function sortieren???

Rokdd


Zuletzt bearbeitet von rokdd am Fr 20.02.04 19:34, insgesamt 1-mal bearbeitet
J.Borchert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Fr 13.02.04 20:26 
ausblenden volle Höhe Delphi-Quelltext
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;      // um eine Zeile zu speichern
      wechsel,i,j,maxi:integer; // alsD ist der Inhalt als Double

  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;  // im maxi ist die Anzahl der belegten Zeilen des Grids
      setLength(punkt,sg1.ColCount);
      for i:=1 to sg1.RowCount-1 do // es werden die belegten Zeilen gezählt
        if alsD(sg1.Cells[su('St'),i])<>0 then inc(maxi); // <>0 = maxi
      repeat // immer wiederholen...
       wechsel:=0// Tester ob noch was sortiert wird
        for i:=maxi downto 1 do // von Ende bis Anfang
         if alsD(sg1.Cells[su('Station'),i-1])>alsD(sg1.Cells[su('Station'),i]) then
          // wenn die obere Zelle > als die aktuelle Zelle [ Spalte1 Mathe]
          // dann tausche :
          begin for j:=1 to sg1.ColCount-1 do punkt[j]:=sg1.Cells[j,i-1];
                      // oberen Inhalt in Punkt
                for j:=1 to sg1.ColCount-1 do sg1.Cells[j,i-1]:=sg1.Cells[j,i];
                      // aktuelle steigt eine nach oben
                for j:=1 to sg1.ColCount-1 do sg1.Cells[j,i]:=Punkt[j];
                      // obere (in Punkt) besetzt die aktuelle Zeile
                inc(wechsel); // Wechsel-Feststeller
          end;
      until wechsel=0//...bis keine Wechsel mehr nötig sind
      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.
ausblenden 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 :cry:

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
rokdd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 20:39 
Danke,
für den quelltext, ich meinte mit function eigentlich etwas anderes so wie tstringgrid.sort oder so... ist aber nicht so schlimm schließlich funktioniert deine variante ja auch! Also nochmal danke!


Rokdd
J.Borchert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Fr 13.02.04 20:52 
Falls sie zu langsam ist, suche mal unter Sortieren, da hat's mich fast erschlagen :lol:

_________________
Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
rokdd Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 21:02 
und bist deswegen "am Ende".... *gggg* ne habe selber schon aml nach sortieralghoritmien geschaut die auf den markt sind: quicksort,.... habe aber letzendlich mciha uch für die einfachste entschieden.


rokdd