TStringgrid: Sortierung

Für Fragen von Einsteigern und Programmieranfängern...

TStringgrid: Sortierung

Beitragvon malabarista » 13. Apr 2017, 09:19 TStringgrid: Sortierung

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 ?
malabarista
 
Beiträge: 185
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 13. Apr 2017, 09:30 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
m.fuchs
 
Beiträge: 1545
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon wp_xyz » 13. Apr 2017, 10:03 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;
wp_xyz
 
Beiträge: 1881
Registriert: 8. Apr 2011, 08:01

Beitragvon malabarista » 13. Apr 2017, 11:29 Re: TStringgrid: Sortierung

@wp_xyz: genau das habe ich gesucht !
Danke !
malabarista
 
Beiträge: 185
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried