Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Element hat kein übergeordnetes Fenster (https://www.delphipraxis.net/166720-element-hat-kein-uebergeordnetes-fenster.html)

tofse 27. Feb 2012 07:58

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:
constructor TListenAnsicht.Create(AOwner: TComponent);
  var Item:TMenuItem;
  begin
    inherited;
    if not assigned(GridMenu) then
    begin
      GridMenu:=TPopUpActionBar.Create(nil);
    ......
Das wird den TStringGrid's zugewiesen.

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:
procedure TForm1.TabControlViewsChange(Sender: TObject);
begin
  ActualTermin:=nil;
  wechselTabEbene1(TabControlViews.TabIndex);
  sleep(0); // -> Breakpoint zum Testen
end; // --> Fehler kommt NACH sleep
Der Fehler kommt NUR, wenn ich das Menü beim Tabwechsel geöffnet lasse.
Was noch wichtig ist, in der tiefe des Codes, wird durch den Tabwechsel veranlasst auch der Inhalt vom Tab 'aufgeräumt'.
Code:
destructor TListenAnsicht.Destroy;
  begin
    if Assigned(GridMenu) then
    begin
      GridMenu.CloseMenu;
      FreeAndNil(GridMenu);
    end;
    inherited Destroy;
  end;
Das war jetzt natürlich sehr verkürzt, aber ich hoffe, damit kann jemand was anfangen

Grüße
Christof

himitsu 27. Feb 2012 09:10

AW: Element hat kein übergeordnetes Fenster
 
Und wo hast du deinem GridMenü das übergeordnete Fenster (Parent) zugewiesen?

tofse 27. Feb 2012 09:14

AW: Element hat kein übergeordnetes Fenster
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1153054)
Und wo hast du deinem GridMenü das übergeordnete Fenster (Parent) zugewiesen?

Gibt es ja nicht...der Fehler kommt ja nur, wenn das Menü beim Tabwechsel noch offen ist

Ich weiße meinem TStringGrid nur das Popupmenu zu
Code:
SG.PopupMenu:=GridMenu;

himitsu 27. Feb 2012 09:44

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:
if Assigned(GridMenu) then
  GridMenu.CloseMenu;
Im OnChange/OnViewChange oder besser noch im OnChanging de TabControls.

tofse 27. Feb 2012 09:47

AW: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von himitsu (Beitrag 1153060)
Im OnChange/OnViewChange oder besser noch im OnChanging de TabControls.

Hatte ich oben schon beschrieben:
Code:
destructor TListenAnsicht.Destroy;
  begin
    if Assigned(GridMenu) then
    begin
      GridMenu.CloseMenu;
      FreeAndNil(GridMenu);
    end;
    inherited Destroy;
  end;
Im onChange werden die Objekte von TListenAnsicht freigegeben. Darin sind enthalten die TStringGrids und das Menü.
Habs im Debugger auch nachvollzogen, da wird auf jeden Fall auch reingesprungen, von daher bin ich echt ratlos

himitsu 27. Feb 2012 09:57

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.

tofse 27. Feb 2012 09:58

AW: Element hat kein übergeordnetes Fenster
 
Zitat:

Zitat von himitsu (Beitrag 1153065)
Hast du irgendwie DevExpress im Programm?

Sagt mir jetzt nichts

himitsu 27. Feb 2012 10:16

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)

tofse 27. Feb 2012 10:23

AW: Element hat kein übergeordnetes Fenster
 
ok, dann springt er hier hin:

Code:
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
Leider muss ich hier passen, was hier das Problem sein soll ?????

himitsu 27. Feb 2012 10:36

AW: Element hat kein übergeordnetes Fenster
 
Einen Haltepunkt auf
Delphi-Quellcode:
raise
oder notfalls auch auf
Delphi-Quellcode:
if (Owner <> nil)
legen.
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 11:24 Uhr.
Seite 1 von 2  1 2      

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