Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Element '' hat kein übergeordnetes Fenster (https://www.delphipraxis.net/42534-element-hat-kein-uebergeordnetes-fenster.html)

maximus Caesar 20. Mär 2005 13:54


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:
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.
Dies ist die aufgerufene Funktion:

Delphi-Quellcode:
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;
Wie kann ich diesen Fehler beheben?

PS: Optionen ist eine eingene Klasse (TOptionen = class)

SirThornberry 20. Mär 2005 13:58

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:
if Rueckgaengig=True then Form2.CheckBox1.Checked:=True else Form2.CheckBox1.Checked:=False;
kann man auch wie folgt verkürzen:
Delphi-Quellcode:
Form2.CheckBox1.Checked:=Rueckgaengig;

maximus Caesar 20. Mär 2005 14:01

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!

Christian Seehase 20. Mär 2005 14:02

Re: Element '' hat kein übergeordnetes Fenster
 
Moin Maximus,

wie sieht denn der Konstruktor von Optionen aus?

SirThornberry 20. Mär 2005 14:06

Re: Element '' hat kein übergeordnetes Fenster
 
bist du dir sicher das der Fehler in der zeile
Delphi-Quellcode:
Optionen.Anzeigen;     //////////////////HIER IST DER FEHLER!!!!
ist und nicht in der zeile
Delphi-Quellcode:
    Text.OptionenLaden;
? In welcher Zeile ist der Balken wenn der Fehler auftritt? Hast du eventuell vergessen die Instanz von TOptionen zu erzeugen (ala: Optionen := TOptionen.Create)

maximus Caesar 20. Mär 2005 14:07

Re: Element '' hat kein übergeordnetes Fenster
 
Hier mal die ganze Unit:

Delphi-Quellcode:
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.
Bis jetzt bin ich immer ohne einen Konstruktor zu schreiben ausgekommen... (weiß auch noch nicht was ich da machen müsste)

maximus Caesar 20. Mär 2005 14:10

Re: Element '' hat kein übergeordnetes Fenster
 
Der Fehler Balken ist bei

Delphi-Quellcode:
Optionen.Anzeigen;
Optionen wird definitiv vor dem Aufruf erzeugt (sonst müsste auch schon ein Fehler bei Text.OptionenLaden auftreten, da es ebenfals Optionen verwendet)
Ich tu alle Objekte über FormCreate von Form1 erzeugen

SirThornberry 20. Mär 2005 14:13

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:
Text := TOptionen.Create;
in deinem Programm stehen?
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.

maximus Caesar 20. Mär 2005 14:15

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!

maximus Caesar 20. Mär 2005 14:17

Re: Element '' hat kein übergeordnetes Fenster
 
Hier die Unit Variablen, über die ich (fast) alle Objekte erzeuge:


Delphi-Quellcode:
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.
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
Seite 1 von 2  1 2      

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