Einzelnen Beitrag anzeigen

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