Autor Beitrag
questor
Hält's aus hier
Beiträge: 6

XP, WIN 2000
C++ Builder
BeitragVerfasst: Do 03.11.05 21:21 
Tach zusammen,

Ich habe eine Applikation, bei der ich viel auf Frames setzte.
Immer wieder kommt es vor, das bei Verwendung von Laufzeitpackages die Meldung "Element hat kein übergeordnetes Fenster" bekomme. Das geschieht genau dann, wenn ich ein von TFrame abgeleitetes Objekt instantiiere.


Wenn ich mir den Call-Stack zum Zeitpunkt der Exception anschaue, dann tritt das Problem während des Durchlaufes des TFrame Constructors auf, und zwar sind die obersten 3 Einträge (vor der Kernel32 Exception)

@Controls@TWinControl@CreateWnd
@Forms@TScrollingWinControl@CreateWnd
@Classes@TReader@ReadProperty@qrrp19Classes@TPersistent

Was micht stutzig macht, ist die Tatsache, dass der gleiche Code fehlerfrei läuft, wenn ich die Option "Laufzeit Packages verwenden" ausschalte. UND: das genannte Problem tritt nicht immer auf, sondern nur in Phasen, d.h. mal für 50 Builds nicht, dann wieder in den nächsten 20, dann nicht mehr ?????

Hat das jemand schon mal erlebt?
questor Threadstarter
Hält's aus hier
Beiträge: 6

XP, WIN 2000
C++ Builder
BeitragVerfasst: Fr 04.11.05 22:54 
Gut, ich hab's gefunden.

:P

Wenn man also eine Komponente dynamisch erzeugt und in dieser Komponente dann den vorgefertigten Frame anzeigen will, dann geht das normalerweise schief wenn während des Resourcen-Lesens über TReader mal ein Fenster-Handle benötigt wird.

Beim standard-Lesen ist nämlich die erzeugende Komponente auch im Zustand "csReading", und das wird in "Controls.pas" in TWinControl.CreateWnd abgefragt.

Also:
Man setze im eigenen Code folgendes um:
ausblenden Delphi-Quelltext
1:
2:
3:
     Include ( ComponentState, csReading );
     MyVisualFrame.Create (self);
     Remove ( ComponentState, csReading );

und es läuft.

(Wahrscheinlich macht ihr sowas krankes eh' nie :lol:

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.