AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Element hat kein übergeordnetes Fenster

Ein Thema von tofse · begonnen am 27. Feb 2012 · letzter Beitrag vom 28. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 08:58
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#2

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:10
Und wo hast du deinem GridMenü das übergeordnete Fenster (Parent) zugewiesen?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#3

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:14
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;
Miniaturansicht angehängter Grafiken
grid_parent.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#4

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:44
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#5

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:47
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#6

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:57
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#7

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 10:58
Hast du irgendwie DevExpress im Programm?
Sagt mir jetzt nichts
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#8

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 11:16
Dann wird's das wohl auch nicht sein.

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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#9

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 11:23
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 ?????
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#10

AW: Element hat kein übergeordnetes Fenster

  Alt 27. Feb 2012, 11:36
Einen Haltepunkt auf raise oder notfalls auch auf 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.
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