![]() |
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: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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