![]() |
Delphi-Version: 5
Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Hallo ich bins wieder;
hab wieder ein einfaches Problem. Habe Form1 und Form2. Form1 fungiert als Hauptmenü was dann From2 öffnet, dies funtioniert auch richtig. Das Problem ist nach dem man Form2 gewonnen/verloren hat soll man wieder zum Menü und dort neu starten können. Ich kann zwar Form2 visible/enabled false machen aber das löscht sie nicht und wenn der button des menüs aktiviert wird geht schon das durchlaufene programm auf. Kurz gefasst brauche ich ein Befehl der Form2 erstellt und das alter löscht durch einen button klick. MfG |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Du kannst das Formular auch auflösen mit Form2.Free;
Dann musst Du es beim nächsten Öffnen vorher wieder erzeugen: Form2 := TForm2.Create(Application); Hilft das? |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Vielen Dank hat geklappt wie du es gesagt hast
Code:
MfG
procedure TForm1.Button1Click(Sender: TObject);
begin Form1. Visible := true; Form2 := TForm2.Create(Application); Form2. Visible := true; Form2. enabled := true; end; procedure TForm1.FormCreate(Sender: TObject); begin Form2.Free; end; end. |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Noch eine Kleinigkeit dazu:
Du kannst in den Projektoptionen einstellen, dass Form2 nicht automatisch erzeugt wird. Dann kannst Du das Auflösen in Form1.OnCreate weglassen. Statt Form.Visible := True/False kann man auch Show bzw. Hide aufrufen. Das ist üblicher und übersichtlicher, macht aber letztlich das selbe. Form2.Enabled musst Du nicht setzen, da das standardmäßig nach dem Erzeugen true ist. |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
In den Projekt-Optionen - Formulare die Form2 aus der Liste nehmen, damit dieses nicht automatisch bei Programmstart erzeugt wird.
Denn hierbei passiert nix
Delphi-Quellcode:
Generell ist es geschickter folgendermassen vorzugehen:
procedure TForm1.FormCreate(Sender: TObject);
begin // Form2 ist noch gar nicht erzeugt, darum ist das für die Katz Form2.Free; end;
Delphi-Quellcode:
Damit das Assigned auch immer korrekt funktioniert, sollte folgender Code in Form2.OnDestroy aufgerufen werden
procedure TForm1.Button1Click(Sender: TObject);
begin if Assigned( Form2 ) then Form2.Free; Form2 := TForm2.Create( Application ); Form2.Show; end;
Delphi-Quellcode:
Dann könnte man sich auch zwei Methoden schreiben
procedure TForm2.OnDestroy( Sender : TObject );
begin if Form2 = Self then Form2 := nil; end;
Delphi-Quellcode:
Der Button zum Resetten bekommt dann folgendes:
procedure TForm1.ZeigeForm2;
begin if not Assigned( Form2 ) then Form2 := TForm2.Create( Application ); Form2.Show; end; procedure TForm1.EntferneForm2; begin if Assigned( Form2 ) then Form2.Free; end;
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender : TObject );
begin EntferneForm2; ZeigeForm2; end; |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Ja klar, das stimmt - soweit hatte ich nicht überlegt.
Form2 wird erst automatisch erzeugt, nachdem Form1 automatisch erzeugt wurde. Dann erzeugst Du durch Deinen Button Form2 nochmal neu. Die Variable Form2 zeigt dann auf das neue Formular. Das automatisch erzeugte Form2 hängt dann in der Luft (also liegt unaufgelöst im Speicher). Normalerweise merkt man das nicht, aber man sollte so etwas von vorn herein vermeiden. Entferne Form2 einfach aus den automatisch zu erzeugenden Projektformularen, dann passt das. |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Danke für die vielen antworten,
aber ich glaube ich bleibe bei dem was ich habe, bevor ich was kaputt mache und alles in einem Feuer aufgeht. MfG PS: hab wieder ein neues Problem^^ |
AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)
[QUOTE=Sir Rufo;1104585]
procedure TForm2.OnDestroy( Sender : TObject ); begin if Form2 = Self then Form2 := nil; end; [/DELPHI]
Delphi-Quellcode:
Und wozu gibt es FreeAndNil?
procedure TForm1.EntferneForm2;
begin if Assigned( Form2 ) then Form2.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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