Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm zurücksetzen (https://www.delphipraxis.net/57553-programm-zuruecksetzen.html)

Kacze 23. Nov 2005 09:38


Programm zurücksetzen
 
Guten Moin,

Ich möchte einen Button erstellen, der mein Programm auf den Anfangszustand zurück setzt?

ich hab ne Idee
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
  begin
    form1.close;
    form1.create;
  end;
oder so etwas in der Art
nur irgendwie will das ned :(
Gruß Kacze

Yan 23. Nov 2005 10:04

Re: Programm zurücksetzen
 
Je nach dem ob dein Programm lange braucht zum starten würde ich es per ShellExecute laden und dann das alte schließen... Ist zwar kein guter Programmierstil, aber immerhin eine Lösung :wink:

leddl 23. Nov 2005 10:07

Re: Programm zurücksetzen
 
:gruebel: Und warum machst du es nicht einfach manuell? Setze alle Captions neu, leere Listboxen, etc und du hast das alles viel schneller als wenn du das Programm erst neu startest.

//Edit:
Zitat:

Zitat von Kacze
Guten Moin

Also "Guten guten Morgen" oder was? :stupid:
Zitat:

Zitat von Kacze
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
  begin
    form1.close;
    form1.create;
  end;

Das kann gar nicht klappen. Du schließt mit Form1.Close das Mainform deines Programmes. Damit wird das gesamte Programm geschlossen. Wie soll denn dann noch die nächste Code-Zeile bearbeitet werden? ;)

Yan 23. Nov 2005 10:11

Re: Programm zurücksetzen
 
^
| Oder so. Schreib doch einfach eine procedure die alles wieder auf den Normalzustand zurücksetzt. Ist besser als das Programm neu zu laden...

dataspider 23. Nov 2005 10:17

Re: Programm zurücksetzen
 
Hi,

folgende Procedure startet deine Anwendung neu oder beendet sie:
Delphi-Quellcode:
procedure ForceKillApplication(ARestart: boolean = False);
var
  AStartInfo: TStartupInfo;
  AProcInfo: TProcessInformation;
begin
  if ARestart then
  begin
    GetStartupInfo(AStartInfo);
    FillChar(AProcInfo, SizeOf(TProcessInformation), #0);
    CreateProcess(nil, GetCommandLine, nil, nil, False,
      CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil,
      PChar(GetCurrentDir), AStartInfo, AProcInfo);
  end;
  TerminateProcess(GetCurrentProcess, 1);
end;
Gruß, Frank

Kacze 23. Nov 2005 10:39

Re: Programm zurücksetzen
 
Danke,
es hat funktioniert!
Gruß Kacze!

bronstein 1. Sep 2017 10:32

AW: Programm zurücksetzen
 
Code:
procedure ForceKillApplication(ARestart: boolean = False);
var
  AStartInfo: TStartupInfo;
  AProcInfo: TProcessInformation;
begin
  if ARestart then
  begin
    GetStartupInfo(AStartInfo);
    FillChar(AProcInfo, SizeOf(TProcessInformation), #0);

    CreateProcess(nil, GetCommandLine, nil, nil, False,
      CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil,
      PChar(GetCurrentDir), AStartInfo, AProcInfo);


  end;
  TerminateProcess(GetCurrentProcess, 1);
end;
Gibt es auch noch die Möglichkeit einen Startparameter der Funktion zu übergaben und wo muss ich die Information bei CreateProcess plazieren?

Glados 1. Sep 2017 11:11

AW: Programm zurücksetzen
 
Zitat:

folgende Procedure startet deine Anwendung neu oder beendet sie:
Wenn man davon absieht, dass keines der folgenden Events durch Nutzung dieser Funktion aufgerufen wird und man mit dem Killen der Anwendung und ggf Datenverlust leben kann, ist der Code OK.
Ansonsten würde ich jedem davon abraten diesen Schnippsel zu verwenden.

Die folgenden Events werden durch das Nutzen dieser Funktion nicht aufgerufen:
Code:
- OnCloseQuery
- OnClose
- OnDestroy

himitsu 1. Sep 2017 11:55

AW: Programm zurücksetzen
 
Natürlich nicht.
TerminateProcess beendet die Ausführung umgehen, also schießt die Anwendung ab.
> SendMessage+WM_CLOSE ans Hauptfenster oder PostThreadMessage+WM_CLOSE an den MainThread.
> bzw., da man hier im eigenen Prozess ist, Application.MainForm.Close oder Application.Terminate

Zitat:

- OnCloseQuery
- OnClose
- OnDestroy
Finalization aller Units usw.

Startparameter:
GetCommandLine sind die Startparameter und der Anwendungsname, der aktuell laufenden Anwendung.
Willst du das ändern, dann ParamStr(0) oder Application.ExeName für die Anwendung und für die eigenen Parameter siehe 3. Parameter bei Delphi-Referenz durchsuchenCreateProcess.

Glados 1. Sep 2017 11:59

AW: Programm zurücksetzen
 
Zitat:

Natürlich nicht.
Nur weiß man nicht, ob der Themenersteller das weiß oder nicht.
Daher meine Anmerkung.
Ich würde einen großen Bogen um diese Funktion machen.


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