![]() |
Element hat kein übergeordnetes Fenster
Hallo,
ich erhalte folgende Fehlermeldung in einer ganz speziellen Situation, mit der ich nichts anfangen kann: Im Projekt ist eine Exception der Klasse EInvalidOperation mit der Meldung 'Element " hat kein übergeordnetes Fenster' aufgetreten Folgende Situation: Es gibt ein TTabControl mit mehreren Reitern. Wenn der letzte Reiter angeklickt wird, wird dynamisch ein oder mehrere TStringGrid's erzeugt. Außerdem gibt es dort ein
Code:
class var GridMenu: TPopUpActionBar;
Code:
Das wird den TStringGrid's zugewiesen.
constructor TListenAnsicht.Create(AOwner: TComponent);
var Item:TMenuItem; begin inherited; if not assigned(GridMenu) then begin GridMenu:=TPopUpActionBar.Create(nil); ...... Der Fehler kommt nun so zu Stande. Ich öffne mit Rechtsklick das Menü und lasse es offen. Dann wechsel ich den Reiter vom TTabControl....und dann kommt der Fehler. Beim Tabwechsel läuft das hier ab
Code:
Der Fehler kommt NUR, wenn ich das Menü beim Tabwechsel geöffnet lasse.
procedure TForm1.TabControlViewsChange(Sender: TObject);
begin ActualTermin:=nil; wechselTabEbene1(TabControlViews.TabIndex); sleep(0); // -> Breakpoint zum Testen end; // --> Fehler kommt NACH sleep Was noch wichtig ist, in der tiefe des Codes, wird durch den Tabwechsel veranlasst auch der Inhalt vom Tab 'aufgeräumt'.
Code:
Das war jetzt natürlich sehr verkürzt, aber ich hoffe, damit kann jemand was anfangen
destructor TListenAnsicht.Destroy;
begin if Assigned(GridMenu) then begin GridMenu.CloseMenu; FreeAndNil(GridMenu); end; inherited Destroy; end; Grüße Christof |
AW: Element hat kein übergeordnetes Fenster
Und wo hast du deinem GridMenü das übergeordnete Fenster (Parent) zugewiesen?
|
AW: Element hat kein übergeordnetes Fenster
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich weiße meinem TStringGrid nur das Popupmenu zu
Code:
SG.PopupMenu:=GridMenu;
|
AW: Element hat kein übergeordnetes Fenster
Hmmmm, also wenn es passiert, wenn das Ding sichtbar ist, dann könnte man versuchen es auszublenden?
Delphi-Quellcode:
Im OnChange/OnViewChange oder besser noch im OnChanging de TabControls.
if Assigned(GridMenu) then
GridMenu.CloseMenu; |
AW: Element hat kein übergeordnetes Fenster
Zitat:
Code:
Im onChange werden die Objekte von TListenAnsicht freigegeben. Darin sind enthalten die TStringGrids und das Menü.
destructor TListenAnsicht.Destroy;
begin if Assigned(GridMenu) then begin GridMenu.CloseMenu; FreeAndNil(GridMenu); end; inherited Destroy; end; Habs im Debugger auch nachvollzogen, da wird auf jeden Fall auch reingesprungen, von daher bin ich echt ratlos |
AW: Element hat kein übergeordnetes Fenster
Hast du irgendwie DevExpress im Programm?
Wir haben hier, im XE auch diese Fehlermeldung, bei einer ComboBox (TdxBarImageCombo), seit dem letzen Update vor ein paar Tagen. Im OnChange wird eventuell ein Passwort abgefragt und sobald dieser Abfragedialofg auch nur einmal angezeigt wird, kommt nach dem END auch diese Fehlermeldung. |
AW: Element hat kein übergeordnetes Fenster
Zitat:
|
AW: Element hat kein übergeordnetes Fenster
Dann wird's das wohl auch nicht sein. :lol:
Du könntest, in den Projektoptionen, mal das "mit Debug-DCUs kompilieren" aktivieren ... vielleicht kommst du damit der Fehlerstelle etwas näher. (eventuell auch sicherheitshalber, nach dem Umstellen, das Projekt neu erzeugen > Shift+F9) |
AW: Element hat kein übergeordnetes Fenster
ok, dann springt er hier hin:
Code:
Leider muss ich hier passen, was hier das Problem sein soll ?????
procedure TWinControl.CreateWnd;
var Params: TCreateParams; ClassRegistered: Boolean; {$IF DEFINED(CLR)} TempClass: TWndClassInfo; WndClass: TWndClass; {$ELSE} TempClass: TWndClass; {$IFEND} begin CreateParams(Params); {$IF DEFINED(CLR)} Params.WinClassName := Format('%s.%d', [Params.WinClassName, AppDomain.CurrentDomain.GetHashCode]); {$IFEND} with Params do begin if (WndParent = 0) and (Style and WS_CHILD <> 0) then if (Owner <> nil) and (csReading in Owner.ComponentState) and (Owner is TWinControl) then WndParent := TWinControl(Owner).Handle else raise EInvalidOperation.CreateFmt(SParentRequired, [Name]); // <----------------------------------------- hier stoppt er |
AW: Element hat kein übergeordnetes Fenster
Einen Haltepunkt auf
Delphi-Quellcode:
oder notfalls auch auf
raise
Delphi-Quellcode:
legen.
if (Owner <> nil)
Eventuell auch erst das Programm starten und dann den Haltepunkt. Und dort mal schauen was z.B. Self.Name, Self.ClassName und Owner so sagen. (überwachte Variablen) Haltepunkt, damit man an die Werte noch vor der Exception rankommt ... danach hat Delphi gerne Probleme damit. :cry: |
AW: Element hat kein übergeordnetes Fenster
Liste der Anhänge anzeigen (Anzahl: 1)
Hm, hat mir leider auch nicht weitergeholfen...
scheint wohl mit meiner Klasse was zu tun zu haben, aber in welchem Zusammenhang der Fehler da reinläuft :(:(:(:( |
AW: Element hat kein übergeordnetes Fenster
Schau Dir mal an, ob Du mit dem Focus weiter kommst.
Ich hatte ähnliche Probleme durch das Zerstören von Controls, die eigentlich noch den Focus hatten. Windows (oder die VCL) hat alles korrekt ausgeführt und wollte dann aber noch das Control neu zeichnen, das den Focus verloren hat. Dieses war aber nun nicht mehr existent, was zu diversen Problemen führte. Lösung: Control nur unsichtbar machen und später zerstören. Vielleicht hilft Dir das ja auf den Weg... |
AW: Element hat kein übergeordnetes Fenster
Hallo,
danke für den Tipp. Ich habe nun einiges umgestellt. Fokus hat nichts gebracht. Ich verwalte die Objekte nun in einem Pool und blende sie bei Bedarf ein bzw. aus. Erst beim Programmende wird alles freigegeben. Ich überlege noch, ob ich mit Hilfe eines Timers die Objekte früher freigeben soll, wenn sie länger nicht benötigt werden, aber nach den letzten Erfahrungen habe ich etwas Bammel davor...ich war ja der Meinung, doch recht "sauber" programmiert zu haben, und dennoch kam der Fehler :? Naja mal überlegen, so funktioniert es zumindest jetzt zuverlässig :thumb: |
AW: Element hat kein übergeordnetes Fenster
Eventuell könntest du ein kleines Beispiel geben?
Alles ausbauen, was unwichtig ist, so daß man möglichst wenig Testcode hätte, um den Fehler reproduzieren zu können, oder den Fehler in einem neuen/leeren Projekt nachbauen. |
AW: Element hat kein übergeordnetes Fenster
Zitat:
Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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-2025 by Thomas Breitkreuz