AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Spiel programmieren, ( Form1 soll Form2 neu erstellen)
Thema durchsuchen
Ansicht
Themen-Optionen

Spiel programmieren, ( Form1 soll Form2 neu erstellen)

Ein Thema von Bosgu · begonnen am 4. Jun 2011 · letzter Beitrag vom 5. Jun 2011
Antwort Antwort
Bosgu

Registriert seit: 2. Jun 2011
13 Beiträge
 
#1

Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 12:12
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 13:33
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?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bosgu

Registriert seit: 2. Jun 2011
13 Beiträge
 
#3

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 13:53
Vielen Dank hat geklappt wie du es gesagt hast

Code:
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.
MfG
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 14:08
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 15:20
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Form2 ist noch gar nicht erzeugt, darum ist das für die Katz
  Form2.Free;
end;
Generell ist es geschickter folgendermassen vorzugehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Assigned( Form2 ) then
    Form2.Free;
  Form2 := TForm2.Create( Application );
  Form2.Show;
end;
Damit das Assigned auch immer korrekt funktioniert, sollte folgender Code in Form2.OnDestroy aufgerufen werden
Delphi-Quellcode:
procedure TForm2.OnDestroy( Sender : TObject );
begin
  if Form2 = Self then
    Form2 := nil;
end;
Dann könnte man sich auch zwei Methoden schreiben
Delphi-Quellcode:
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;
Der Button zum Resetten bekommt dann folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender : TObject );
begin
  EntferneForm2;
  ZeigeForm2;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 4. Jun 2011 um 15:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 15:28
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bosgu

Registriert seit: 2. Jun 2011
13 Beiträge
 
#7

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 4. Jun 2011, 22:27
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^^
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Spiel programmieren, ( Form1 soll Form2 neu erstellen)

  Alt 5. Jun 2011, 05:25
[QUOTE=Sir Rufo;1104585]
procedure TForm2.OnDestroy( Sender : TObject );
begin
if Form2 = Self then
Form2 := nil;
end;
[/DELPHI]

Delphi-Quellcode:
procedure TForm1.EntferneForm2;
begin
  if Assigned( Form2 ) then
    Form2.Free;
end;
Und wozu gibt es FreeAndNil?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:07 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