![]() |
Suche Tabellen-VCL mit automatischer Sortierung
Hallo.
Ich suche eine VCL, die eine mehrspaltige Tabelle erstellt. Jedoch sollte sie nicht wie Excel wirken, sondern eher wie der Windows Explorer bei der Detailansicht. Mehrfachauswahlen sollten möglich sein. Das Wichtige ist die automatische Sortierung in zwei Richtungen je Spalte. Der Benutzer soll die Datensätze nach seinem Ermessen Anordnen dürfen, ohne dass ich mit Bubblesort etc. rumhantieren muss. Zusätzliche Anforderung: Ich habe nur die kostenfreie Turbo-Delphi Version. Die VCL muss also dynamisch in den Code einbindbar sein (ist das so ohne Weiteres bei Disclosed-Source-VCLs möglich?) Kennt da jemand was feines? PS: Ich kenne Torry.net zwar, aber mir fehlen Begriffe, wie man eine solche "Explorer-Style-Tabelle" VCL nennt. Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Meinst Du so etwas:
![]() |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Ein TlistView oder der
![]() |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Zitat:
Vielen Dank. Genau sowas suche ich. Einfach aufgebaut und gut handzuhaben. Ich hab aber irgendwie ein Problem mit der Einbindung. Ich habe mir die Demo-Application abgeschaut, bekomme aber diese kleinen "Sortierpfeile" nicht hin. Ich habe aus der DFM alles rausgeholt. Das Problem ist, dass ich keine fremden VCLs einbinden kann, weswegen ich die Demo nicht direkt öffnen kann. So sieht meine Test-Anwendung aus:
Delphi-Quellcode:
In der DFM der Demo steht auch nur folgendes:
uses SortListViews, XPMan;
procedure TForm1.SortListView1CustomSort(Sender: TObject; ColIndex: Integer; Str1, Str2: String; var Res: Integer; var Handled: Boolean); var n1, n2: Integer; begin if (ColIndex = 2) then begin n1 := StrToIntDef(Str1, 0); n2 := StrToIntDef(Str2, 0); if (n1 = n2) then Res := 0 else if (n1 > n2) then Res := 1 else Res := -1; Handled := True; end; end; procedure TForm1.Button1Click(Sender: TObject); var SortListView1: TSortListView; begin SortListView1 := TSortListView.Create(Form1); SortListView1.Parent := Form1; SortListView1.Top := 20; SortListView1.Left := 20; SortListView1.Width := 300; SortListView1.Height := 500; SortListView1.ViewStyle := vsReport; SortListView1.RowSelect := True; SortListView1.ReadOnly := True; SortListView1.HideSelection := False; SortListView1.OnCustomSort := SortListView1CustomSort; with SortListView1.Columns.Add do begin Caption := 'Blubb'; Width := 150; end; with SortListView1.Columns.Add do begin Caption := 'Blubb'; Width := 100; Alignment := taRightJustify; end; with SortListView1.Items.Add do begin Caption := 'Item 1'; SubItems.Add('aaaaa'); SubItems.Add('12345'); SubItems.Add('kkkkk'); end; with SortListView1.Items.Add do begin Caption := 'Item 2'; SubItems.Add('iiiii'); SubItems.Add('72334'); SubItems.Add('sjfjs'); end; with SortListView1.Items.Add do begin Caption := 'Item 3'; SubItems.Add('uuiiu'); SubItems.Add('92843'); SubItems.Add('jhase'); end; with SortListView1.Items.Add do begin Caption := 'Item 4'; SubItems.Add('iouri'); SubItems.Add('28342'); SubItems.Add('lkasj'); end; with SortListView1.Items.Add do begin Caption := 'Item 5'; SubItems.Add('ooooo'); SubItems.Add('91929'); SubItems.Add('nsjsk'); end; // SortListView1.Refresh; end;
Code:
Gruß
object SortListView1: TSortListView
Left = 16 Top = 24 Width = 465 Height = 337 Columns = < item Caption = 'Column 1' Width = 100 end item Caption = 'Column 2' Width = 100 end item Alignment = taRightJustify Caption = 'Numbers' Width = 100 end item Caption = 'Column 4' Width = 100 end> HideSelection = False ReadOnly = True RowSelect = True SmallImages = ImageList1 TabOrder = 0 ViewStyle = vsReport OnCustomSort = SortListView1CustomSort end blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Schau doch mal in die Sourcen der Demo, da gibt es auch nur eine Sortierroutine, die aussieht wie Deine. Ich kann mir das aber gegen 17:30 zu Hause gerne in Ruhe nochmal ansehen.
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Die Sortierfunktion kommt auch von der Demo. Ich habe fast alles direkt übernommen. Aber bei mir kommen keine Pfeile. Die Ressourcen für die Up/Down-Pfeile sind in meiner EXE korrekt verlinkt. Ebenfalls habe ich alle gesetzten (!) DFM-Eigenschaften übernommen. Vielleicht fehlt eine Standard-Property, die nicht in der DFM steht, aber beim dynamischen Erzeugen auf False steht. (Wobei ich nichts dergleichen gefunden habe) Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Es gibt nur eine weitere Published-Property und ist das Event OnCustomSort.
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
So, habe mir die Kompo gerade mal installiert. Einfach eine davon auf eine leere Form und 2 Columns eingefügt, schon erscheinen die Pfeile. Also sind alle Standardeigenschaften bereits korrekt vorbelegt. Hast Du es mal mit Erzeugen statt Kompilieren versucht?
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
Hallo.
Ja, ich erzeuge in der Regel immer. Schau dir doch mal meinen Source (ZIP-File) von oben an. Er ist mit Turbo-Delphi erstellt und bindet die VCL dynamisch ein. Exe ist auch dabei. Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab' s! Verschieb mal im Source der Kompo das Loaded nach Public und rufe es im OnShow der Form auf.
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
Hallo.
Vielen Dank! Es funktioniert :-D Wieso wurde eigentlich dieses Loaded() nicht beim dynamischen Aufruf gestartet, sondern nur im statischen? Ist das ein Bug der Unit? Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
...Mir ist grad noch was eingefallen:
Ich möchte gerne die Liste bereits am Anfang absteigend nach der 2ten Spalte sortieren. Ich finde aber keine derartige Methode in der Unit. Sollte ich irgendwie einen Column-Klick simulieren oder ist das Murks? im private Teil steht:
Delphi-Quellcode:
Das in den public verschieben und aufrufen? Dann gäbe es aber auch einen Namenskonflikt mit der property TListView.ColumnClick :?
procedure ColumnClick(Sender: TObject; Column: TListColumn);
Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Wenn ich das in der VCL mache, steht da
Zitat:
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
Hallo.
Ich denke, du hast es falsch verstanden. Ich möchte nicht eine Aktion ausführen, wenn die Spalte geklickt wird, sondern ich möchte im Vorraus (im FormShow, nach dem Füllen der Liste) die Liste nach der 2ten Spalte sortieren. Hierfür müsste ich entweder ein oder zwei Spalten-Klicks simulieren, oder ich verwende irgendeine Routine der Unit. PS: Als ich von der ColumnClick() sprach, meinte ich die interne private-Prozedur innerhalb der SortListViews.pas . Ich komme aber mit dem ganzen VCL-Quellcode nicht richtig zurecht :gruebel: . Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Ich meinte, die Kompo führt doch bei Klick auf ein Column selbständig Code aus. Da würde ich mir eine dummy-Methode schreiben und dem Event OnColumnClick der Kompo zuweisen. Diese dummy-Methode kannst Du doch dann aufrufen.
[edit] Vertippsler [/edit] |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Hallo.
Ich habe gerade folgendes hinbekommen:
Delphi-Quellcode:
Die erste Variante von Sort scheint wunderbar zu klappen.
public
procedure Sort(ColumnIndex: integer); overload; // Extended procedure Sort(ColumnIndex: integer; ASC: boolean); overload; // Extended // Extended procedure TSortListView.Sort(ColumnIndex: integer); begin ColumnClick(self, Columns[ColumnIndex]); end; // Extended procedure TSortListView.Sort(ColumnIndex: integer; ASC: boolean); begin LastSortAsc := not ASC; ColumnClick(self, Columns[ColumnIndex]); end; Die zweite Variante von Sort hat mit ASC funktioniert, hat aber aus irgendeinem Grund Probleme mit DESC. Wenn ich den Test-Button das erste Mal klicke, wird nach ASC sortiert, erst nach den weiteren Klicks dauerhaft nach DESC. *grübel* :gruebel: Gruß blackdrake |
Re: Suche Tabellen-VCL mit automatischer Sortierung
Hast Du Dir die Methode OnColumnClick der Komponente mal genau angesehen? Da wird abgefragt, ob eine andere Spalte als die gemerkte angeklickt wurde.
|
Re: Suche Tabellen-VCL mit automatischer Sortierung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Vielen Dank für deine Hilfe. Das hatte ich übersehen. Ich habe mal die neue Unit angehängt. Sie enthält jetzt: - Den zugreifbaren Loaded() für dynamische Einbindung (vielleicht nicht gerade die eleganteste Lösung?) - 2 individuelle Sortierfunktionen - Methode, den Sortierpfeil zu entfernen
Delphi-Quellcode:
Gruß
// Extended
procedure TSortListView.Sort(ColumnIndex: integer); begin ColumnClick(self, Columns[ColumnIndex]); end; // Extended procedure TSortListView.Sort(ColumnIndex: integer; ASC: boolean); begin if (LastSortIndex <> -1) and (LastSortIndex <> ColumnIndex) then begin Columns[LastSortIndex].ImageIndex := -1; end; LastSortIndex := ColumnIndex; LastSortAsc := not ASC; ColumnClick(self, Columns[ColumnIndex]); end; // Extended procedure TSortListView.HideArrow; begin if (LastSortIndex <> -1) then begin Columns[LastSortIndex].ImageIndex := -1; end; end; blackdrake // Edit: Fehler behoben // Edit 2: Erweiterung |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz