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 Treenode/treeview automatisches Destroy (https://www.delphipraxis.net/89993-treenode-treeview-automatisches-destroy.html)

hermannhass 10. Apr 2007 04:24


Treenode/treeview automatisches Destroy
 
Hallo
ich benutze delphi7 und delphi2006(win32).
ich habe eine Form mit einem Treeview, in dem ich dynamisch nach dem Formular-"Create"
eigene Treenode-Komponenten anfüge. Nun tritt folgendes Problem auf:
Nach dem "create" werden wie gewünscht die Knoten (manuell/dynamisch) erzeugt,
aber vor dem ersten(!) Show diese "destroyed" und wieder neu "created"... wie von geisterhand.
die ist ärgerlich, da zusätzliche "angeerbte" Informationen am myttreenode(createnode natürlich auch modifiziert), d
die beim ersten manuellen Create gespeichert wurden, verloren gehen!!!
Es könnte mit dem "parent"-Change ereignis zusammenhängen, aber müssen deshalb meine selbst erzeugten
knoten gelöscht und wieder erzeugt werden, ohne das ich eine kontrolle habe?
Hat jemand eine Idee? Oder spinnt mein Compiler?
Gruß Hermann

bttb930 10. Apr 2007 08:03

Re: Treenode/treeview automatisches Destroy
 
dazu müsste man wohl den quelltext mal sehen. jedenfalls spinnt ein compiler nicht - der macht nur, was man ihm sagt.

toms 10. Apr 2007 08:36

Re: Treenode/treeview automatisches Destroy
 
Hallo

Tritt der Fehler auch auf, wenn du die Nodes zu einem späteren Zeitpunkt anfügst, z.B bei Klick auf einen Button.

hermannhass 10. Apr 2007 13:59

Re: Treenode/treeview automatisches Destroy
 
Zitat:

Zitat von toms
Hallo

Tritt der Fehler auch auf, wenn du die Nodes zu einem späteren Zeitpunkt anfügst, z.B bei Klick auf einen Button.

Nein, ich kenne auch irgendwie das Phenomen, tritt nur vor dem ersten "Show" auf. Reproduzierbar!
Ich meine, der treeview löscht bei der ersten Parentzuweisung alle knoten automatisch und bildet sie neu.
wenn ich die knoten beim "firstshow" bilde, bleiben sie unverändert.
nur benutze ich das modul als Konfigurationsmodul, welches nur bei bedarf mal angezeigt werden muss.
Dieses automatisches Löschen/erzeugen ist nervig und ich dachte, es gäbe ein lösung.
kann ich eigentlich irgendwie durch das "Comctrls" auch debuggen(mit F7/F8)?

Danke Hermann

Muetze1 10. Apr 2007 14:01

Re: Treenode/treeview automatisches Destroy
 
1. Kann es sein, dass er ein Clear macht bevor er die Knoten aus der DFM streamed?
2. Ja, du kannst die ComCtrls debuggen. Setze dazu in den Projektoptionen -> Compiler -> Debug-DCUs ein Häkchen und erstelle das gesamte Projekt erneut. Dann kannst du den Anweisunden "hinterher" gehen mit F7, etc

hermannhass 10. Apr 2007 14:35

Re: Treenode/treeview automatisches Destroy
 
Zitat:

Zitat von Muetze1
1. Kann es sein, dass er ein Clear macht bevor er die Knoten aus der DFM streamed?
2. Ja, du kannst die ComCtrls debuggen. Setze dazu in den Projektoptionen -> Compiler -> Debug-DCUs ein Häkchen und erstelle das gesamte Projekt erneut. Dann kannst du den Anweisunden "hinterher" gehen mit F7, etc

Zu 2. Danke für den Tip, einfach und effektiv....

Zu 1. Nein, ein Clear ist ausgeschlossen, und Reload aus "dfm" auch, da die Knoten dynamisch gebildet werden.
Im Formular ist das treeview leer....
rufe nach meinem tform.Create(nil) eine Procedure "Start" auf, die 2 knoten dynamisch anfügt
diese sind einwandfrei im treeview. Man man nun einen parent dem formular zuweisst
(ein clientbereich aus meiner Mainform), werden die
destroy proceduren aller treenodes(hier 2mal) ausgerufen und anschliessend durch create(2mal)
wieder erzeugt. Der Text(caption) bleibt erhalten.
Dieses "phenomen" ist in in DP7 und 2006 einfach reproduzierbar und bei jedem Parent-Change!

Natürlich kann man auf diese "situation" einstellen, indem ich vorher einmal den parent setze und dann esrt den tree baue, aber ich arbeite ungerne mit solchen Tricks bei nicht logischem verhalten.
den besonders bei nachkommen von treenode (und dafür gibt es nunmal eine virtuelles createnode
oder ein OnCreateNodeClass) ist dies ärgerlich, da ausser dem text nichts beim automatischen "Recreate" übernommern wird.

hermannhass 10. Apr 2007 14:47

Re: Treenode/treeview automatisches Destroy
 
Dank dem Trace durch meine Comctrls habe ich die Stelle gefunden.
Ein handle wird erst beim ersten show gesetzt, wenn noch keins definiert ist.
dabei wird das der knotenzustand in einen stream geschreiben, ein destroywnd, createwnd aufgerufen und die knoten
neu gebildet. und sowas ist nur beim treeview der fall.
ist unschön, möchte man das Formular mal in ein anderes gebunden haben(parent=client) oder mal als zusätzlcihe Form(parent=nil). dann mass man das treeview neu aufbauen(wenn man dem ttreenode datenbereiche oder properties vererbt hat)
Einziger Ausweg. Keine nachkommen von treenode verwenden, sondern daten über "data"-Property ankoppeln....

Muetze1 11. Apr 2007 00:30

Re: Treenode/treeview automatisches Destroy
 
Für deine beschriebene Anwendung des Formulars, hast du was falsches gewählt. So wie du das beschreibst brauchst du eine TFrame und keine TForm. Die TFrame kannst du dann einer Mainform auf den Clientbereich legen oder auf eine leere Form mit Alignment von alClient legen. Ein Formular ist dafür eigentlich nicht gedacht, sondern dafür wurde extra TFrame eingeführt.

Schonmal damit probiert bzw. warum kein TFrame?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 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 by Thomas Breitkreuz