Ich möchte ein TStringgrid sortieren . Das funktioniert mit SortColRow.
Nun habe ich aber Spalten mit Integerzahlen und Spalten mit Strings.
Ich weiss, man kann die eigene Sortierung einstellen über
OnCompareCDells
Da muss ich dann entscheiden je nach Spalte wie sortiert wird.
Ich denke, so eine Unterscheidung innerhalb des Sortier-Algorithmus verlangsamt diesen.
ABER geht es auch anders ?
Ich möchte sagten :
if spalte=3 then onCompareCells=integer-sort;
if spalte=1 then onCompareCells=SortColRow;
Oder denke ich da völlig falsch ?
TStringgrid: Sortierung
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2636
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: TStringgrid: Sortierung
malabarista hat geschrieben:Da muss ich dann entscheiden je nach Spalte wie sortiert wird.
Ich denke, so eine Unterscheidung innerhalb des Sortier-Algorithmus verlangsamt diesen.
Ja, das wird etwas langsamer. Aber warum stört dich das? Hast du ein akutes Problem mit der Geschwindigkeit? Um wieviele Zeilen handelt es sich?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: TStringgrid: Sortierung
Der Sortiervorgang wird ja durch irgendeine Aktion angestoßen, z.B. einen Button-Click oder MenuItem-Click. Weise hier dem onCompareCells-Event des StringGrid die entsprechende Routine zu. Etwa so (ungetestet):
Code: Alles auswählen
procedure TForm1.StringGrid1CompareCellsAsNumber(Sender: TObject;
ACol, ARow, BCol, BRow: Integer; var Result: integer);
begin
Result := CompareValue(StrToInt(AStringGrid1.Cells[ACol, ARow]), StrToInt(AStringGrid1.Cells[BCol, BRow]));
end;
procedure TForm1.StringGrid1CompareCellsAsText(Sender: TObject;
ACol, ARow, BCol, BRow: Integer; var Result: integer);
begin
Result := CompareText(AStringGrid1.Cells[ACol, ARow], AStringGrid1.Cells[BCol, BRow]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SortCol: Integer;
begin
if Sender = BtnSpalte3Sortieren then begin
SortCol := 3;
StringGrid1.OnCompareCells := @StringGrid1CompareCellsAsNumber
end else
if Sender = BtnSpalte1Sortieren then begin
SortCol := 1;
StringGrid1.OnCompareCells := @StringGrid1CompareCellsAsText;
end else
raise Exception.Create('Unbekannte Sortier-Aktion');
StringGrid1.SortColRow(true, SortCol);
end;
-
- Beiträge: 321
- Registriert: Sa 11. Jun 2016, 12:16
- OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
- CPU-Target: 64Bit
- Wohnort: Konstanz
Re: TStringgrid: Sortierung
@wp_xyz: genau das habe ich gesucht !
Danke !
Danke !