Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Sortierung in einem Treeview (https://www.delphipraxis.net/41834-sortierung-einem-treeview.html)

torud 9. Mär 2005 13:12


Sortierung in einem Treeview
 
Hallo Wissende!

Ich stehe vor einem echten Problem!

Zumindest stellt es für mich eins dar. Ich habe einen Treeview, welcher fix 3 Parents hat. Diese Parents heissen Elemente, Klassen und ID´s. Ich parse eine CSS-Datei und weise dann diesen Parents die jeweilgen Selektoren (Childs) zu.

Nun würde ich gern innerhalb dieser Gruppen alphabetisch sortieren. Das scheint aber gar nicht so einfach, oder finde ich nur den Schalter nicht!?

Vielleicht ist noch wichtig zu wissen, dass ich den Inhalt einer SynEdit permanent parse und "bei Bedarf" in den Treeview schreibe. Also wenn sich ein Selektor ändert, ändere ich den Treeviewinhalt. Beim Einlesen einer Datei klappt es wunderbar mit der Sortierung, da ich alle Elemente in Stringlisten einlese, welche ich sortiere. Da ich aber den Treeview nicht bei jedem Tastaturanschlag komplett loeschen und wieder schreiben will, aktualisiere ich den Treeview nur bei Änderungen. Allerdings ohne das die Sortierung erhalten bleibt.

Wer kann helfen???

s14 9. Mär 2005 13:37

Re: Sortierung in einem Treeview
 
Hallo torud,
mit dieser Funktion sollte es gehen:

Delphi-Quellcode:
function CustomSortProc(Node1, Node2: TTreeNode; Data: Integer): Integer; stdcall;
// für das Sortieren von TreeViews, als Parameter an Customsort übergeben:
// Aufruf: TreeView1.CustomSort(@CustomSortProc, 0);
// Data: 0 = Absteigend, 1 = Aufsteigend
begin
  if Data = 0 then
    Result := AnsiStrIComp(Pchar(Node1.Text), PChar(Node2.Text))
  else
    Result := -AnsiStrIComp(PChar(Node1.Text), PChar(Node2.Text));
end;
Delphi-Quellcode:
procedure TForm1.Absteigend1Click(Sender: TObject);
begin
  TV1.CustomSort(@CustomSortProc, 0);
end;
Gruß
s14

torud 9. Mär 2005 13:50

Re: Sortierung in einem Treeview
 
Hallo s14!

Habe es gerade probiert und bin begeistert!
Genau das war es, was ich brauchte!

Spitze, Super, Danke!

Nogge 20. Jul 2005 15:48

Re: Sortierung in einem Treeview
 
Huhu,
bei diesem Thema möchte ich gern mal nachhaken^^
Ich möchte nämlich global, also von einer anderen Form aus, auf die SortProc zugreifen. Ich erhalte jedesmal bei
Delphi-Quellcode:
F_Main.TreeView.CustomSort(@F_Main.CustomSortProc,(Coursorposition)0,true);
diese Fehlermeldung:
Zitat:

[Error] (...): Variable required
Innerhalb der F_Main meldet der Compiler keinen Fehler diesbezüglich. Da ich die SortProc nicht public deklarieren darf, weiß ich gerade nicht weiter. Hat jemand ne Antwort darauf?

omata 21. Jul 2005 01:03

Re: Sortierung in einem Treeview
 
Also, ich weiss ja nicht was du da vor hast.
Aber es ist nicht sinnvoll Zugriffe unit-übergreifend einfach über Komponenten zumachen.
Eine Zugriffmethode ist in so einem Fall die einzig sinnvolle Vorgehenweise.
Ich kenne deine Unit-Struktur nicht aber Zirkelschlüsse sind nicht sinnvoll. In so einem Fall hilft nur noch ein Hook, um noch einigermaßen sauber zuprogrammieren.

Also mach dir erstmal gedanken über deine Programmstruktur. Überlege mal ob das sinnvoll ist, was du da vorhast.

MfG
Thorsten

Nogge 21. Jul 2005 01:14

Re: Sortierung in einem Treeview
 
Ich möchte die Sortierungsmethode (Name,ImageIndex usw.) der TreeView in Form1 mit einer zweiten Form (= Optionen) ändern können. Dafür muss ich von der zweiten Form aus, die Änderungen übernehmen.

*Thinking*
Mir fällt gerade ein, dass ich eine in Form1 deklarierte public Form1.Procedure, die die Function "function CustomSortProc(Node1, Node2: TTreeNode; Data: Integer): Integer; stdcall;" enthält, erstellen könnte...

[edit]
Ist so zwar umständlicher als der leider nicht vorhandene direkte Weg, aber es funktioniert jetzt so, wie gewünscht. Danke für den Denkanstoß, omata!
[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz