![]() |
Reload
Hi, will quasi einen Reload durchführen, so das mein Programm an einer bestimmten Stelle Neu Startet...
kann mir jemand den Befehl nennen? |
Re: Reload
Dafür gibt es keinen Befehl. Du musst diese Funktion selber implmentieren
|
Re: Reload
Dazu müsste ich ja wissen wie man exe-Dateien in delphi öffnet, weiß das jemand?
Damit ich ihm sagen kann: ...Close; <Befehl zum Öffnen>; Oder wie kann es gehen? |
Re: Reload
![]() Aber sein eigenes Programm neuzustarten, da haben sich schon einige die Zähne dran ausgebissen. Vielleicht findest du noch ein paar Threads dazu über die Suche, wurde imho mal hier diskutiert. |
Re: Reload
Gibts den Befehl erst ab Version 2007 oder warum finde ich den nicht in der Delphi Hilfe :pale:
|
Re: Reload
Definier Dir einen eindeutigen Anfangszustand und pack den in eine Methode. Diese Methode kannst Du dann aufrufen. Diese ShellExecute-Geschichte vergiss mal lieber wieder.
|
Re: Reload
Guten Abend,
theoretisch könnte es so gehen. Dein Programm erstellt beim Schließen eine Batchdatei und startet diese. Aus der Batchdatei wird dann Dein Programm z.B. mit einem Parameter gestartet. So kannst Du innerhalb des Programms feststellen, dass das Programm nicht "normal" gestartet wurde. Die BatchDatei kann sich nach dem Programmstart wieder löschen. Grüße Klaus |
Re: Reload
Warum so kompliziert?
|
Re: Reload
Zitat:
Nee, aber ich habe ihn bei mir auch nicht gefunden... Hm... Steht wohl nur in der MSDN... :glaskugel: Dafür gabs ![]()
Delphi-Quellcode:
procedure Neustart;
begin PostMessage(Application.Handle, WM_CLOSE, 0, 0); ShellExecute(0, 'open', PChar(ParamStr(0)), nil, nil, SW_SHOW); end; |
Re: Reload
Zitat:
|
Re: Reload
Zitat:
|
Re: Reload
Zitat:
Grüße Klaus |
Re: Reload
Solange man keinen nicht umgehbaren MultiStartCheckt im Programm hat, kann man es auch direkt per ShellExecute neu starten.
Fast alle kursierenden Batch-Lösungen basieren darauf, daß die EXE sich selber verändern/austauschen sollte, was nunmal nicht so leicht möglich ist, wärend die Anwendung noch läut bzw. die Datei (EXE) noch geöffnet ist. |
Re: Reload
Das ist hier imho aber nicht nötig. Er muss sich, wie ich oben schon schrieb ( und Detlef es vertieft hat) nur eine Funktion einbauen, die den gewünschten Zustand initialisiert
|
Re: Reload
Zitat:
|
Re: Reload
Zitat:
Einen schönen Abend noch .. Grüße Klaus |
Re: Reload
Zitat:
|
Re: Reload
Zitat:
2.) es gibt wahrscheinlich deshalb nicht diesen Befehl, weil er kaum nötig ist. Ok, es gibt schon paar Situationen wo ein Neustart nötig ist, aber im Normalbetrieb eigentlich kaum. Warum? Weil wenn man "richtig" programmiert, also mit Prozeduren, Funktionen und lokalen Variablen, dann gibt es auch kaum einen Grund für einen Neustart. |
Re: Reload
Hi, schön das es hier so eine rege Diskussion gab, aber könte mir bitte mal jemand sie ShellExecute erklären? also die Parameter und so?
Und ich habe jetzt eine Ausweichlösung genommen, weil ich um die Zustandsgeschichte zu machen, ca. 3 Stunden gebraucht hätte... bzw. hatte ich einfach keine Lust dazu^^ :roll: Pogrammierer und mathemathiker haben eins gemeinsam:-> Sie sind von Natur aus schreibfaul ;) |
Re: Reload
Zitat:
|
Re: Reload
:roll: immer diese programmierer...
nee jetz ma im ernst... |
Re: Reload
|
Re: Reload
Zitat:
|
Re: Reload
Es gibt auch schon das nächste Problem mit meiner alternativ Lösung:
Delphi-Quellcode:
Hier mal die Proz um dies eig. geht, Wenn Laden?-> Nein, sollte doch eigentlich nichts passieren oder? Falsch, er macht muter fröhlich mit dem ganznormalen handler weiter also quasi mit dem Laden?-> Ja Handler oder dem SectionExists->False handler... aber warum?
procedure TForm1.Button7Click(Sender: TObject);
begin name:=EName.Text; Mediaplayer1.Stop; save := TIniFile.Create('.\save\SaveFile.ini'); //try if save.SectionExists(name)=True then //wenn name existiert: begin if MessageDlg('Kaktus existiert bereits, Laden?',mtConfirmation,mbYesNo,0)=mrYes then //wenn Laden Ja begin sek:=save.ReadInteger(name,'ZeitSek',0); min:=save.ReadInteger(name,'ZeitMin',0); h:=save.ReadInteger(name,'ZeitH',0); hunger:=save.ReadInteger(name,'Hunger',30); durst:=save.ReadInteger(name,'Durst',30); laune:=save.ReadInteger(name,'Laune',50); alter:=save.ReadInteger(name,'Alter',0); gesundheit:=save.ReadInteger(name,'Gesundheit',100); //finally save.Free; LSekunden.caption:=IntToStr(sek); LMinuten.caption:=IntToStr(min); LStunden.caption:=IntToStr(h); LAHunger.caption:=IntToStr(hunger); LADurst.caption:=IntToStr(durst); LALaune.caption:=IntToStr(laune); LAAlter.caption:=IntToStr(alter); LAGesundheit.caption:=IntToStr(gesundheit); frame:=0; EssenF:=0; TrinkenF:=0; SpielenF:=0; Mediaplayer2.Play; Form1.Caption:=EName.Text; Button7.visible:=False; EName.visible:=False; Label1.visible:=False; Panel5.visible:=False; PName.caption:=EName.Text; end //Wenn Laden Nein-> Else:Empty... end else //Wenn name nicht existiert sek:=save.ReadInteger(name,'ZeitSek',0); min:=save.ReadInteger(name,'ZeitMin',0); h:=save.ReadInteger(name,'ZeitH',0); hunger:=save.ReadInteger(name,'Hunger',30); durst:=save.ReadInteger(name,'Durst',30); laune:=save.ReadInteger(name,'Laune',50); alter:=save.ReadInteger(name,'Alter',0); gesundheit:=save.ReadInteger(name,'Gesundheit',100); save.Free; LSekunden.caption:=IntToStr(sek); LMinuten.caption:=IntToStr(min); LStunden.caption:=IntToStr(h); LAHunger.caption:=IntToStr(hunger); LADurst.caption:=IntToStr(durst); LALaune.caption:=IntToStr(laune); LAAlter.caption:=IntToStr(alter); LAGesundheit.caption:=IntToStr(gesundheit); frame:=0; EssenF:=0; TrinkenF:=0; SpielenF:=0; Mediaplayer2.Play; Form1.Caption:=EName.Text; Button7.visible:=False; EName.visible:=False; Label1.visible:=False; Panel5.visible:=False; PName.caption:=EName.Text; end; |
Re: Reload
Fehlt im Else-Zweig zufällig das Begin-End außenrum? ;)
|
Re: Reload
Name ist ein ganz blöder Name für eine Variable, und es fehlt ein begin-end-Block. Mehr ist mir auf den ersten Blick nicht aufgefallen.
[edit] Doch, benutze absolute Pfade, sonst ist nicht klar, wo die Ini gesucht werden soll, und auf true sollte man auch nicht abfragen. [/edit] |
Re: Reload
Zudem ist es gefährlich einen relativen datenpfad (zum Arbeitsverzeichnis != Anwendungsverzeichnis) zu verwenden
|
Re: Reload
Zitat:
Edit: Auf der anderen Seite sind wahrscheinlich 99,99% alle Suchergebnisse die, daß man gebeten wird die Suche zu bemühen :gruebel: Also ausnahmsweise ;) ShellExecute(Handle, Anweisung, PChar(Programmpfad), PChar(Programmparameter), PChar(Arbeitsordner), FensterArt); Als Beispiel:
Delphi-Quellcode:
Uses
ShellApi; ShellExecute(0, 'open', PChar(Programmpfad), nil, nil, SW_NORMAL); |
Re: Reload
Hallo,
- nimm mal die Anweisungen nach dem else komplett in ein begin..end - hinter dem end aus dem begin..end der if Anweisung würde ich noch ein ; setzen - Überprüfung nicht auf True
Delphi-Quellcode:
sondern
if save.SectionExists(name)=True then
Delphi-Quellcode:
dann probier mal...
if save.SectionExists(name) then
roter Kasten...egal 8) Gott bin ich langsam... |
Re: Reload
Zitat:
|
Re: Reload
Zitat:
|
Re: Reload
Zitat:
Zitat:
|
Re: Reload
nur noch mal kurz zum
![]() ![]() oder einfach mal Strg+Shift+F Verzeichnis "C:\Programme\CodeGear\" und Suchwort "ShellExecute" |
Re: Reload
Zitat:
|
Re: Reload
Zitat:
|
Re: Reload
Zitat:
|
Re: Reload
Zitat:
Wenn man natürlich das WinSDK in die Hilfe eingebunden hat, sieht man es auch per F1, ansonsten nur im MSDN... |
Re: Reload
Zitat:
|
Re: Reload
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
die sollte in D2007 doch eigentlich mit dabei sein? |
Re: Reload
Die war bei mir auch schon in Delphi 5 drin, aber man kann ja nie wissen, welche Konstellation der Threadersteller nutzt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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 by Thomas Breitkreuz