AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treenode/treeview automatisches Destroy

Offene Frage von "hermannhass"
Ein Thema von hermannhass · begonnen am 10. Apr 2007 · letzter Beitrag vom 11. Apr 2007
Antwort Antwort
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#1

Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 04:24
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
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 08:03
dazu müsste man wohl den quelltext mal sehen. jedenfalls spinnt ein compiler nicht - der macht nur, was man ihm sagt.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 08:36
Hallo

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

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#4

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 13:59
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
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 14:01
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
  Mit Zitat antworten Zitat
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#6

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 14:35
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.
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
hermannhass

Registriert seit: 23. Dez 2006
Ort: Nähe Las Palmas
69 Beiträge
 
#7

Re: Treenode/treeview automatisches Destroy

  Alt 10. Apr 2007, 14:47
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....
Entwickle SW mit Delphi 2006 und sql.
Lebe auf Gran Canaria.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Treenode/treeview automatisches Destroy

  Alt 11. Apr 2007, 00:30
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?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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