TSortGrid

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

TSortGrid

Beitrag von Heinrich Wolf »

Hallo,

unter dem externen Link am Ende sind ein paar Quellcodes. TSortGrid hat Methoden, um Spalten mit QuickSort zu sortieren, einen dazu passenden Pfeil in der Row 0 anzuzeigen, Spaltenbreiten je nach Inhalt anzupassen, Zellen rechtsbündig oder mittig auszurichten und Zeilenblöcke oder Spaltenblöcke zu löschen oder einzufügen. Ein paar Methoden lassen sich zur Laufzeit mit selbstdefinierten Methoden austauschen. Damit realisiere ich z.B. Sortieren nach einer Kombination mehrerer Spalten. Die Quellcodes sind unter Delphi 1 (kann kein SetLength), Delphi 5 und Lazarus 0.9.31 für Linux und Windows lauffähig.

Vielleicht kann's jemand brauchen.
Heiner

http://www.Wolf-Fuerth.de/ -> Technik und Gratis Software -> Download Übersicht -> am Ende der Seite
http://www.Wolf-Fuerth.de/sortgrid.zip Direktlink
Zuletzt geändert von Heinrich Wolf am Sa 28. Mai 2011, 16:18, insgesamt 5-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TSortGrid

Beitrag von af0815 »

Kannst du bitte den Dateien hinzufügen, welcher Lizenz sie entsprechen. Code ohne Lizenzangaben sind immer problematisch, besonders wenn ev. aus einem Homeprojekt plötzlich was größeres wird.

Falls die dazu nichts einfällt, so schau die mal die Header im Lazarussource an. Bzw. nimm die Lizenz unter der die Basiskomponente steht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: TSortGrid

Beitrag von Heinrich Wolf »

OK. Ich hab den Dateien einen Kopf auf Basis von TStringGrid (LGPL) hinzugefügt und sie hier ausgetauscht.

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: TSortGrid

Beitrag von diogenes »

Hab' den Code nicht angeschaut, habe anderes im Sinn: QuickSort hat den nachteil, nicht stabil zu sein, das heißt, Objekten, die aus mehreren Teilen bestehen (z.B. "Spitzname", "Vorname", "Familienname", "Adresse") und die einander im Sortierkriterium gleichen, kann es passieren, daß ihre Reihenfolge untereinander nicht mehr die slebe ist. Wenn die Einhaltung der 'internen' Reihenfolge aber gewünscht ist, ist ein anderer Sortieralgorithmus angebracht.
Ceterum censeo computatores per Pascal docendos esse.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: TSortGrid

Beitrag von Heinrich Wolf »

Ich biete in tSortGrid eine SetCompareRows() Methode an, mit der man z.B. eine Funktion übergeben kann, die nach einer Kombination mehrer Spalten sortiert. In einer solchen Funktion kann man dann tSortGrid.CompareRowsAtCol() aufrufen. Diesen Hinweis habe ich bereits am Anfang des Threads angedeutet.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: TSortGrid

Beitrag von Heinrich Wolf »

Ich hab jetzt eine Demo Anwendung dazu gemacht und noch ein paar Fehler beseitigt.

Das Lazarus TStringGrid kann zwar schon sortieren, aber nur mit String Vergleich. TSortGrid kann die Strings als TDateTime, Int64 oder Extended interpretieren und bietet String Vergleich direkt oder mit AnsiCompareText an.

TStringGrid hat zwar eine Property TStringGrid.Columns[Col].Alignment, aber TStringGrid.Columns[Col] bringt immer die Exception "Index out of bounds". TSortGrid hat eine Property TSortGrid.ColAlignment[Col], die funktioniert.

Die TSortGrid.*Width*() Methoden brauche ich für Delphi. Das Lazarus TStringGrid hat schon vergleichbare Methoden, die man auch in TSortGrid verwenden kann.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: TSortGrid

Beitrag von Heinrich Wolf »

Ich hab jetzt die einzelne TSortGrid.SortCol ersetzt durch eine Liste TSortGrid.SortCols[] . Außerdem sind weitere Verbesserungen drin und das zip Archiv liegt nicht mehr auf http://www.lazarusforum.de/ sondern auf meiner eigenen Webseite http://www.Wolf-Fuerth.de/sortgrid.zip .

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: TSortGrid

Beitrag von Heinrich Wolf »

Ich benutze TSortGrid u.a. in meiner gratis Software CalPrint. Diese hab ich mit Delphi 5 erstellt und nach Lazarus, auch für Linux migriert.
http://www.Wolf-Fuerth.de/cal1_de.htm
http://www.wolf-fuerth.de/downl1de.htm#CalPrint
-> CalPrint.exe und calprint rpm
http://www.wolf-fuerth.de/cal_zip.exe

Viele Grüße
Heiner

Antworten