Einzelnen Beitrag anzeigen

Kanne

Registriert seit: 15. Mai 2003
5 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse

  Alt 3. Feb 2010, 08:01
hatte das gleiche Problem für eine "FileMerge"-Programm, da der Open-Dialog bzw. DragNDrop die zuletzt ausgewählte Datei immer als erste übermittelt statt die Sortierung zu behalten.

Wie auch immer - ich habe
- die Schleife in der Sort-Routine entfernt (da man das 1-zeilig machen kann),
- die Sort-Spalte als Integer-Übergabe geändert (warum war das ein Array ?!)
- den Separator auf beliebige Länge erweitert (@ könnte ja auch im Text vorkommen)
- das ganze um einen Wechsel "aufsteigend" / "absteigend" erweitert

Code:
{--------------------------------------------------------------------------}
procedure SortStringGrid(GenStrGrid: TStringGrid; ThatCol: Integer);
{--------------------------------------------------------------------------}
const
  TheSeparator = '@#@#@';
var
  I,X: integer;
  MyList: TStringList;
begin
    MyList := TStringList.Create;
    MyList.Sorted := false;
    for I := 1 to (GenStrGrid.RowCount - 1) do MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator + GenStrGrid.Rows[I].Text);
    Mylist.Sort;
    X := MyList.Count;
    if GenStrGrid.Tag <> ThatCol
    then begin {ascending}
         for I := 1 to X do GenStrGrid.Rows[I].Text := RightStr(MyList.Strings[(I-1)], Length(MyList.Strings[(I-1)]) - Pos(TheSeparator, MyList.Strings[(I-1)]) - Length(TheSeparator) + 1);
         GenStrGrid.Tag := ThatCol; {COL merken}
    end
    else begin {descending}
         for I := 1 to X do GenStrGrid.Rows[I].Text := RightStr(MyList.Strings[(X-I)], Length(MyList.Strings[(X-I)]) - Pos(TheSeparator, MyList.Strings[(X-I)]) - Length(TheSeparator) + 1);
         GenStrGrid.Tag := MaxInt; {COL merken}
    end;
    MyList.Free;
end;
Angehängte Dateien
Dateityp: zip sortstringgrid_139.zip (10,2 KB, 44x aufgerufen)
  Mit Zitat antworten Zitat