Thema: Delphi Das verrückte Formular

Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#6

AW: Das verrückte Formular

  Alt 21. Aug 2014, 12:18
Duch das Setzen von Form.Parent := pnl1; wird ein DestroyHandle aufgerufen, was intern dazu führt, daß die Items des TreeView freigegeben und neu erzeugt werden. Dadurch werden die gespeicherten Pointer auf die TreeNodes ungültig.
Es kommt immer darauf an, wie das intern behandelt wird.
In TCustomTreeView.DestroyWnd wird der Inhalt von Items in einen MemoryStream geschrieben und Items.Clear aufgerufen. In dem Moment sind die TreeNode-Pointer schon ungültig, obwohl sie noch die richtigen Daten enthalten. Nach dem Recreate werden die TTreeNodes zwar wieder hergestellt, allerdings stimmt die Position im Speicher mit hoher Wahrscheinlichkeit nicht mehr mit der vorigen überein. Das dauerhafte Speichern von Pointern auf TreeNodes ist also mit Vorsicht zu genießen. Leider gibt es auch keinen brauchbaren Event, mit dem man das abfangen könnte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat