Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Neustart (https://www.delphipraxis.net/113217-neustart.html)

larsder4 4. Mai 2008 19:30


Neustart
 
Hey Leute,

ich hab mal ne kleine dumme Frage, die Antwort wurde hier sicher schon 100 Mal geschrieben, aber ich weiß nicht, wonach ich suchen soll...

Wie kann ich mein Programm neustarten, also an den Anfang zurücksetzen, sozusagen FormCreate noch einmal ausführen...

Ihr wisst schon was ich meine :wink:

Danke im Vorraus
Lars

mkinzler 4. Mai 2008 19:36

Re: Neustart
 
Einfach
Delphi-Quellcode:
Form.Free;
Form := <Form-Klasse).Create;

toms 4. Mai 2008 19:45

Re: Neustart
 
Zitat:

Zitat von mkinzler
Einfach
Delphi-Quellcode:
Form.Free;
Form := <Form-Klasse).Create;

Dies funktioniert jedoch nur mit Unterforms. Bei der Hauptform jedoch nicht.

larsder4 4. Mai 2008 19:47

Re: Neustart
 
Es soll aber im Hauptform sein.
Ich kam mit dem Vorschlag auch nicht so recht weiter...

Mein Quelltext sieht ungefähr so aus:

Delphi-Quellcode:

if MessageDlg('Noch einmal?', mtWarning, [mbYes, mbNo], 0) = mryes then
begin
//Neustart
end
else
Form1.Close;

Fussball-Robby 4. Mai 2008 19:48

Re: Neustart
 
Wilst du die ganze Anwendung neustarten? Das ginge so:
Delphi-Quellcode:
procedure Neustart;
begin
  PostMessage(Application.Handle, WM_CLOSE, 0, 0);
  ShellExecute(0, 'open', PChar(ParamStr(0)), nil, nil, SW_SHOW);
end;
Mfg

mkinzler 4. Mai 2008 19:50

Re: Neustart
 
Man könnte auch nur .Create() noch einmal aufrufen, dann wird es nicht als Konstruktor, sondern als Klassenmethode angewendet

tomsel 4. Mai 2008 19:54

Re: Neustart
 
Warum willst du denn unbedingt FormCreate noch mal ausführen? Du könntest doch einfach eine Methode schreiben, die bei Klick auch "Nochmal" alles "auf Anfang" setzt, ohne Neustart. Diese würde ich dann zusätzlich auch aus FormCreate aufrufen.

larsder4 4. Mai 2008 20:02

Re: Neustart
 
Das war nur mein erster Gedanke mit dem FormCreate.

Wie sollte das denn ungefähr aussehen?


Bei dem Vorschlag von mkinzler

Delphi-Quellcode:
Form1.Create(); //wenn er das so meinte
kommt die Meldung: Nicht genügend wirkliche Parameter.
Allerdings weiß ich nicht so recht, was in die Klammern muss (Sender: TObject) geht ja nicht.

mkinzler 4. Mai 2008 20:06

Re: Neustart
 
Delphi-Quellcode:
Form1.Create( Form1.Owner);

Fussball-Robby 4. Mai 2008 20:08

Re: Neustart
 
Frage: Was willst du damit überhaupt erreichen? Es gibt bestimmt einen besseren Weg, als das Create nochmal aufzurufen.

mkinzler 4. Mai 2008 20:09

Re: Neustart
 
Zitat:

Es gibt bestimmt einen besseren Weg, als das Create nochmal aufzurufen.
Warum, ein solcher Aufruf als Klassenmethode lädt die dfm neu

larsder4 4. Mai 2008 20:11

Re: Neustart
 
Es soll ein Quiz werden, wenn man eine bestimmte Anzahl von Fragen beantwortet hat, soll man halt noch einmal von vorne anfangen können, dafür müssen ja sowohl alle Punktstände auf 0 gesetzt werden, als auch die Fragen wieder neu ausgewählt werden, da hielt ich es für einfacher, das ganze Programm noch einmal von vorne starten zu lassen.

toms 4. Mai 2008 20:17

Re: Neustart
 
Zitat:

Zitat von larsder4
Es soll ein Quiz werden, wenn man eine bestimmte Anzahl von Fragen beantwortet hat, soll man halt noch einmal von vorne anfangen können, dafür müssen ja sowohl alle Punktstände auf 0 gesetzt werden, als auch die Fragen wieder neu ausgewählt werden, da hielt ich es für einfacher, das ganze Programm noch einmal von vorne starten zu lassen.

In diesem Fall geht das sich auch ohne einen Neustart des Programms.
Im OnCreate() oder zu einem späteren Zeitpunkt initialisiert du Variablen, die Fragen etc.
Diese müssen nur wieder neu initialisiert werden.

larsder4 4. Mai 2008 20:22

Re: Neustart
 
Aber was ist denn gegen einen Neustart einzuwenden? Ich müsste sonst auch wieder die Arrays neu belegen, Schleifen müssten wieder von vorne anfangen usw... da ist ein Neustart einfach weniger aufwendig

Delphi-Quellcode:
Form1.Create(Form1.Owner);
funktioniert übrigens nicht, da eine Exception auftritt: Komponente mit der Bezeichnung Form1 existiert bereits.

tomsel 4. Mai 2008 20:27

Re: Neustart
 
Zitat:

Aber was ist denn gegen einen Neustart einzuwenden? Ich müsste sonst auch wieder die Arrays neu belegen, Schleifen müssten wieder von vorne anfangen usw... da ist ein Neustart einfach weniger aufwendig
tatsächlich? :gruebel:

Wenn du alles ein mal initialisierst, kannst du das doch auch 2, 3, 4 .... 1000000 mal. Packe den dazu notwendigen Code in eine eigene Methode und rufe diese aus FormCreate und bei "Nochmal" auf. Hab ich schon versucht, dir nahe zu legen.

larsder4 4. Mai 2008 20:32

Re: Neustart
 
Aah :dancer: jetzt verstehe ich auch, was du meintest.
Hatte die Idee schon mal, dann doch aber wieder verworfen.

Klappt aber so :thumb:

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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