![]() |
Element '' hat kein übergeordnetes Fenster
Hallo!
Ich bekomme diese Fehlermeldung: Erste Zufalls-Exception bei $7C81EB33. Exception-Klasse EInvalidOperation mit Meldung 'Element '' hat kein übergeordnetes Fenster'. Prozess Project1.exe (2644) Dies ist der entsprechende Programmtext:
Delphi-Quellcode:
Dies ist die aufgerufene Funktion:
unit Tastaturkontrolle;
interface uses Windows; type TTastaturkontrolle = class private public procedure ueberpruefen(var key : char); end; implementation uses Unit1, Variablen, Unit2; procedure TTastaturkontrolle.ueberpruefen(var key : Char); begin if (Variable.Ansicht=1) and ((GetASyncKeyState(VK_ESCAPE))<>0) then Form1.Close; if (Variable.Ansicht=2) and ((GetAsyncKeyState(VK_ESCAPE))<>0) then Variable.Ansicht:=1; if (Variable.Ansicht=1) and ((key='w')or(Key='W')) then begin if Menue1.Auswahl>1 then Menue1.Auswahl:=Menue1.Auswahl-1 else Menue1.Auswahl:=4; end; if (Variable.Ansicht=1) and ((key='s')or(key='S')) then begin if Menue1.Auswahl<4 then Menue1.Auswahl:=Menue1.Auswahl+1 else Menue1.Auswahl:=1; end; if (Variable.Ansicht=2) and ((key='w')or(Key='W')) then begin if Menue1.Auswahl>1 then Menue1.Auswahl:=Menue1.Auswahl-1 else Menue1.Auswahl:=5; end; if (Variable.Ansicht=2) and ((key='s')or(key='S')) then begin if Menue1.Auswahl<5 then Menue1.Auswahl:=Menue1.Auswahl+1 else Menue1.Auswahl:=1; end; if (Variable.Ansicht=1) and (Menue1.Auswahl=2) and ((GetAsyncKeyState(VK_RETURN))<>0) then begin Form2.Visible:=False; Text.OptionenLaden; Optionen.Anzeigen; //////////////////HIER IST DER FEHLER!!!! Form2.ShowModal; end; end; end.
Delphi-Quellcode:
Wie kann ich diesen Fehler beheben?
procedure TOptionen.Anzeigen;
begin if Rueckgaengig=True then Form2.CheckBox1.Checked:=True else Form2.CheckBox1.Checked:=False; if dreimalWuerfeln=True then Form2.CheckBox2.Checked:=True else Form2.CheckBox2.Checked:=False; if Zugzwang=True then Form2.CheckBox3.Checked:=True else Form2.CheckBox3.Checked:=False; if Geschwindigkeit=1 then Form2.RadioGroup7.ItemIndex:=0; if Geschwindigkeit=0.5 then Form2.RadioGroup7.ItemIndex:=1; if Geschwindigkeit=0.1 then Form2.RadioGroup7.ItemIndex:=2; if Geschwindigkeit=0.05 then Form2.RadioGroup7.ItemIndex:=3; if Geschwindigkeit=0.01 then Form2.RadioGroup7.ItemIndex:=4; if Geschwindigkeit=0.005 then Form2.RadioGroup7.ItemIndex:=5; if Geschwindigkeit=0.001 then Form2.RadioGroup7.ItemIndex:=6; Form2.RadioGroup1.ItemIndex:=Wuerfeln; Form2.RadioGroup2.ItemIndex:=Farbauswahl; Form2.RadioGroup3.ItemIndex:=Spieler-2; Form2.RadioGroup4.ItemIndex:=Figuren-1; if Figurauswahl=True then Form2.RadioGroup5.ItemIndex:=0 else Form2.RadioGroup5.ItemIndex:=1; if BewegungsArt=True then Form2.RadioGroup6.ItemIndex:=0 else Form2.RadioGroup6.ItemIndex:=1; end; PS: Optionen ist eine eingene Klasse (TOptionen = class) |
Re: Element '' hat kein übergeordnetes Fenster
step mal in "TOptionen.Anzeigen" hinein und gehe dann dort schritteweise vorran, dann siehst du in welcher zeile von "Anzeigen" der Fehler auftritt.
Nur mal so als tipp:
Delphi-Quellcode:
kann man auch wie folgt verkürzen:
if Rueckgaengig=True then Form2.CheckBox1.Checked:=True else Form2.CheckBox1.Checked:=False;
Delphi-Quellcode:
Form2.CheckBox1.Checked:=Rueckgaengig;
|
Re: Element '' hat kein übergeordnetes Fenster
Ich brauchs nur Aufrufen, egal ob ne Anweisung drinnesteht oder nicht, und schon kommt der Fehler!
D.h. selbst wenn es eine leere Prozedur ist kommt der Fehler! |
Re: Element '' hat kein übergeordnetes Fenster
Moin Maximus,
wie sieht denn der Konstruktor von Optionen aus? |
Re: Element '' hat kein übergeordnetes Fenster
bist du dir sicher das der Fehler in der zeile
Delphi-Quellcode:
ist und nicht in der zeile
Optionen.Anzeigen; //////////////////HIER IST DER FEHLER!!!!
Delphi-Quellcode:
? In welcher Zeile ist der Balken wenn der Fehler auftritt? Hast du eventuell vergessen die Instanz von TOptionen zu erzeugen (ala: Optionen := TOptionen.Create)
Text.OptionenLaden;
|
Re: Element '' hat kein übergeordnetes Fenster
Hier mal die ganze Unit:
Delphi-Quellcode:
Bis jetzt bin ich immer ohne einen Konstruktor zu schreiben ausgekommen... (weiß auch noch nicht was ich da machen müsste)
unit Optionen;
interface type TOptionen = class procedure Anzeigen; procedure Speichern; private public Rueckgaengig : Boolean; dreimalWuerfeln : Boolean; Zugzwang : Boolean; Geschwindigkeit : Extended; Wuerfeln : Integer; Farbauswahl : Integer; Spieler : Integer; Figuren : Integer; Figurauswahl : Boolean; BewegungsArt : Boolean; end; implementation uses Unit2,Variablen; procedure TOptionen.Anzeigen; begin Form2.Checkbox1.Checked:=Rueckgaengig; Form2.Checkbox2.Checked:=dreimalWuerfeln; Form2.Checkbox3.Checked:=Zugzwang; if Geschwindigkeit=1 then Form2.RadioGroup7.ItemIndex:=0; if Geschwindigkeit=0.5 then Form2.RadioGroup7.ItemIndex:=1; if Geschwindigkeit=0.1 then Form2.RadioGroup7.ItemIndex:=2; if Geschwindigkeit=0.05 then Form2.RadioGroup7.ItemIndex:=3; if Geschwindigkeit=0.01 then Form2.RadioGroup7.ItemIndex:=4; if Geschwindigkeit=0.005 then Form2.RadioGroup7.ItemIndex:=5; if Geschwindigkeit=0.001 then Form2.RadioGroup7.ItemIndex:=6; Form2.RadioGroup1.ItemIndex:=Wuerfeln; Form2.RadioGroup2.ItemIndex:=Farbauswahl; Form2.RadioGroup3.ItemIndex:=Spieler-2; Form2.RadioGroup4.ItemIndex:=Figuren-1; if Figurauswahl=True then Form2.RadioGroup5.ItemIndex:=0 else Form2.RadioGroup5.ItemIndex:=1; if BewegungsArt=True then Form2.RadioGroup6.ItemIndex:=0 else Form2.RadioGroup6.ItemIndex:=1; end; procedure TOptionen.Speichern; begin Text.OptionenSpeichern; end; end. |
Re: Element '' hat kein übergeordnetes Fenster
Der Fehler Balken ist bei
Delphi-Quellcode:
Optionen wird definitiv vor dem Aufruf erzeugt (sonst müsste auch schon ein Fehler bei Text.OptionenLaden auftreten, da es ebenfals Optionen verwendet)
Optionen.Anzeigen;
Ich tu alle Objekte über FormCreate von Form1 erzeugen |
Re: Element '' hat kein übergeordnetes Fenster
du schreibst "Text.OptionenSpeichern;", ich finde aber nirgends die declaration von Text. Ich denke mal "Text" ist vom Typ TOptionen. Wenn dem so ist kannst du auch einfach das "Text." davor weglassen. Hast du
Delphi-Quellcode:
in deinem Programm stehen?
Text := TOptionen.Create;
Wenn der balken bei Optionen.Anzeigen steht deutet dies darauf hin das bei der Anweisung darüber der Fehler ist. Und da dies die erste TOptionen Anweisung ist deutet dies wiederum darauf hin das du "Optionen := TOptionen.Create" vergessen hast, oder eben die andere instanz von TOptionen. |
Re: Element '' hat kein übergeordnetes Fenster
Text ist vom Typ TText. Ich verwende eine Unit namens Variablen zur erzeugung aller Objekte und greife über diese Unit auf die einzelnen Objekte zu. Daher kannst dus grad nirgends finden!
|
Re: Element '' hat kein übergeordnetes Fenster
Hier die Unit Variablen, über die ich (fast) alle Objekte erzeuge:
Delphi-Quellcode:
in TForm1.FormCreate wir zuerst das Objekt Variable erzeugt(Variable :=TVariable.Create;) und danach die Prozedure Objektinitalisieren aufgerufen. da ich in anderen bereichen keine Fehlermeldung bekomme, scheint dies richtig zu funktionieren.
unit Variablen;
interface uses Tastaturkontrolle, Optionen, Menue1, Menue2, Hintergrund, Blau, Render, Gelb, Gruen, Rot, Auswahl, Wuerfel, Spielfeld, Text, Initalisieren; type TVariable = class procedure VariableInitalisieren; procedure Objektinitalisieren; private public Ansicht : Integer; //Speichert welches Menü oder Spielfeld aktiv end; var Variable : TVariable; Tastatur : TTastaturkontrolle; Blau : TBlau; Gelb : TGelb; Gruen : TGruen; Rot : TRot; Auswahl : TAuswahl; Wuerfel : TWuerfel; Spielfeld : TSpielfeld; Text : TText; Initalisieren: TInitalisieren; Menue1 : TMenue1; Menue2 : TMenue2; Rendern : TRendern; Hintergrund : THintergrund; Optionen : TOptionen; implementation procedure TVariable.VariableInitalisieren; begin end; procedure TVariable.Objektinitalisieren; begin Initalisieren:= TInitalisieren.Create; Text := TText.Create(nil); Tastatur := TTastaturkontrolle.Create; Rendern := TRendern.Create; Blau := TBlau.Create; Blau.Initalisieren; Gelb := TGelb.Create; Gelb.Initalisieren; Gruen := TGruen.Create; Gruen.Initalisieren; Rot := TRot.Create; Rot.Initalisieren; Auswahl := TAuswahl.Create; Auswahl.Initalisieren; Spielfeld := TSpielfeld.Create; Spielfeld.Initalisieren; Wuerfel := TWuerfel.Create; Wuerfel.Initalisieren; Menue1 := TMenue1.Create; Menue1.Initalisieren; Menue2 := TMenue2.Create; Menue2.Initalisieren; Hintergrund := THintergrund.Create; Hintergrund.Initalisieren; Optionen := TOptionen.Create; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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