Autor Beitrag
stefanstp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Mo 07.10.02 08:28 
Nach Nachname geht das so:
ausblenden volle Höhe 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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
procedure SortGrid (Grd: TStringGrid; Spalte, ZweiteSpalte, BeginnZeile, 
Endzeile: Integer; GrossKleinIgnorieren: boolean); 
var
  i, j, k: integer;

  function verglsp(s: integer): integer;
  begin
    if GrossKleinIgnorieren then
      result := ansistricomp (pchar(grd.cells[s, j]),
      pchar(grd.cells[s, j + k]))
    else
     result := ansistrcomp(pchar(grd.cells[s, j]),
     pchar(grd.cells[s, j + k]));
  end;

  function vergl: boolean;
  var
    x: integer;
  begin
    x := verglsp(spalte);
    if x = 0 then
      x := verglsp(zweitespalte);
    result := x > 0;
  end;

  procedure doit;
  var
    y: integer;
    s: string;
  begin
    for y := grd.fixedcols to grd.colcount - 1 do begin
      s := grd.cells[y, j];
      grd.cells[y, j] := grd.cells[y, j + k];
      grd.cells[y, j + k] := s;
    end;
  end;

begin
  with grd do begin
    editormode := false;
    k := EndZeile shr 1;
    while k > 0 do begin
      for i := BeginnZeile to EndZeile - k do begin
        j := i;
        while (j >= BeginnZeile) and vergl do begin
          doit;
          if j > k then
            dec(j, k)
          else
            j := BeginnZeile;
        end;
      end;
      k := k shr 1;
    end;
  end;
end;

// Beispielaufruf mit Familiennamen in Spalte 3 und Vornamen in Spalte 2
procedure TFormx.Button4Click(Sender: TObject);
begin
  sortgrid(stringgrid1, 2, 1, stringgrid1.fixedrows, stringgrid1.rowcount - 1, false);
end;

Aber wie kann ich jetzt nach Datum sortieren lassen??? Und da dies für einen Geburtstagskalender ist, wäre es sogar richtig super, wenn man nicht die Jahre berücksichtigt, sondern nur die Tage und Monate. So das man alle Personen sieht, die zuerst im Januar Geburtstag haben und abwärtssortiert bis Dezember.
Wie kann man das machen?

Wer kann helfen???

STEFAN

(07.10.02 20:35 Tino) Code-Tags hinzugefügt.
mk2
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

WIN 2000
D4 Prof
BeitragVerfasst: Mo 07.10.02 11:54 
hi,

was relativ einfach ginge, wäre eine funktion schreiben die deinen datumsstring so konvertiert, dass du ihn ganz normal sortieren kannst, also die aus 24.12.89 z.B. 122489 macht.

in meinem beispiel sieht die so aus (kann aber anders sein wenn du ein
anderes datumsformat hast) :

ausblenden Quelltext
1:
2:
3:
4:
function sortiertes_datum(s:string):string;
begin
 result:=copy(s,4,2)+copy(s,1,2)+copy(s,7,2);
end;


wenn du deine Daten alle durch diese Funktion schickst kannst du sie
ganz gewohnt wie strings sortieren.

ich hoffe ich hab das jetzt so erklärt, dass mans verstehen kann :?:

mfg micha
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.10.02 14:37 
Ups, das kann aber in die Hose gehen.

Führ den Vergleich lieber mit einer TDate-Variablen aus. Also wandele den Datums-String in ein TDate um und dann vergleichen. Warum? Kuck in der Hilfe, wie TDate deklariert ist: Eine Fließkommazahl. Der ganzzahlige Anteil stellt die vergangenen Tage seit was weiß ich da und der Bruchteil entspricht der Uhrzeit.