Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Reload (https://www.delphipraxis.net/136044-reload.html)

Fussel9 22. Jun 2009 18:39


Reload
 
Hi, will quasi einen Reload durchführen, so das mein Programm an einer bestimmten Stelle Neu Startet...

kann mir jemand den Befehl nennen?

mkinzler 22. Jun 2009 18:40

Re: Reload
 
Dafür gibt es keinen Befehl. Du musst diese Funktion selber implmentieren

Fussel9 22. Jun 2009 18:55

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?

Mithrandir 22. Jun 2009 18:57

Re: Reload
 
Delphi-Referenz durchsuchenShellExecute

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.

Fussel9 22. Jun 2009 19:02

Re: Reload
 
Gibts den Befehl erst ab Version 2007 oder warum finde ich den nicht in der Delphi Hilfe :pale:

DeddyH 22. Jun 2009 19:02

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.

Klaus01 22. Jun 2009 19:03

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

mkinzler 22. Jun 2009 19:05

Re: Reload
 
Warum so kompliziert?

Mithrandir 22. Jun 2009 19:06

Re: Reload
 
Zitat:

Zitat von Fussel9
Gibts den Befehl erst ab Version 2007 oder warum finde ich den nicht in der Delphi Hilfe :pale:

:gruebel:

Nee, aber ich habe ihn bei mir auch nicht gefunden... Hm... Steht wohl nur in der MSDN... :glaskugel:

Dafür gabs hier das hier:

Delphi-Quellcode:
procedure Neustart;
begin
  PostMessage(Application.Handle, WM_CLOSE, 0, 0);
  ShellExecute(0, 'open', PChar(ParamStr(0)), nil, nil, SW_SHOW);
end;

DeddyH 22. Jun 2009 19:06

Re: Reload
 
Zitat:

Zitat von mkinzler
Warum so kompliziert?

Ja eben, einfach das eigene Programm in den Autostart und Windows neu starten :mrgreen:

Die Muhkuh 22. Jun 2009 19:08

Re: Reload
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Fussel9
Gibts den Befehl erst ab Version 2007 oder warum finde ich den nicht in der Delphi Hilfe :pale:

:gruebel:

Nee, aber ich habe ihn bei mir auch nicht gefunden... Hm... Steht wohl nur in der MSDN... :glaskugel:

Weil ShellExecute ein WinAPI und keine Delphi-Funktion ist :zwinker:

Klaus01 22. Jun 2009 19:09

Re: Reload
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von mkinzler
Warum so kompliziert?

Ja eben, einfach das eigene Programm in den Autostart und Windows neu starten :mrgreen:

Es ist bisher ja noch icht gesagt worden, was mit dem reload bezweckt oder warum er ausgeführt werden soll.

Grüße
Klaus

himitsu 22. Jun 2009 19:09

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.

mkinzler 22. Jun 2009 19:11

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

DeddyH 22. Jun 2009 19:12

Re: Reload
 
Zitat:

Zitat von mkinzler
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

Genauso verstehe ich das auch :cheers:

Klaus01 22. Jun 2009 19:14

Re: Reload
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von mkinzler
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

Genauso verstehe ich das auch :cheers:

Gut, ich gebe mich den Weisen/Wissenden geschlagen

Einen schönen Abend noch ..
Grüße
Klaus

mkinzler 22. Jun 2009 19:17

Re: Reload
 
Zitat:

Gut, ich gebe mich den Weisen/Wissenden geschlagen
Viele Wege führen nach Rom. :zwinker:

Popov 22. Jun 2009 19:26

Re: Reload
 
Zitat:

Zitat von Fussel9
Hi, will quasi einen Reload durchführen, so das mein Programm an einer bestimmten Stelle Neu Startet...

kann mir jemand den Befehl nennen?

1.) verabschiede dich von der Idee, daß es für alles einen Befehl gibt.

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.

Fussel9 22. Jun 2009 19:28

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 ;)

DeddyH 22. Jun 2009 19:29

Re: Reload
 
Zitat:

Zitat von Fussel9
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?

Nein, dazu bin ich zu schreibfaul :tongue:

Fussel9 22. Jun 2009 19:31

Re: Reload
 
:roll: immer diese programmierer...
nee jetz ma im ernst...

DeddyH 22. Jun 2009 19:33

Re: Reload
 
MSDN-Library durchsuchenShellExecute

mkinzler 22. Jun 2009 19:33

Re: Reload
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von Fussel9
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?

Nein, dazu bin ich zu schreibfaul :tongue:

Zudem gibt es ja die Delphi-Hilfe und Foren mit Suchfunktion ( wie diese hier) :zwinker:

Fussel9 22. Jun 2009 19:35

Re: Reload
 
Es gibt auch schon das nächste Problem mit meiner alternativ Lösung:


Delphi-Quellcode:
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;
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?

Zwoetzen 22. Jun 2009 19:40

Re: Reload
 
Fehlt im Else-Zweig zufällig das Begin-End außenrum? ;)

DeddyH 22. Jun 2009 19:40

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]

mkinzler 22. Jun 2009 19:42

Re: Reload
 
Zudem ist es gefährlich einen relativen datenpfad (zum Arbeitsverzeichnis != Anwendungsverzeichnis) zu verwenden

Popov 22. Jun 2009 19:42

Re: Reload
 
Zitat:

Zitat von Fussel9
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?

Also bei vielen Funktionen würde ich dir bereitwilliger helfen, aber gerade ShellExecute müßte tausendfach im Forum behandelt worden sein, weil sie auch sehr oft benutzt wird. Man braucht nur die Suche bemühen.

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);

haentschman 22. Jun 2009 19:43

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:
if save.SectionExists(name)=True then
sondern
Delphi-Quellcode:
if save.SectionExists(name) then
dann probier mal...

roter Kasten...egal 8) Gott bin ich langsam...

mkinzler 22. Jun 2009 19:46

Re: Reload
 
Zitat:

Auf der anderen Seite sind wahrscheinlich 99,99% alle Suchergebnisse die, daß man gebeten wird die Suche zu bemühen Grübelnd...

Also ausnahmsweise Wink
Und das Betätigen der F1-Taste kann man ja wirklich keinem zumuten. :stupid:

Popov 22. Jun 2009 19:52

Re: Reload
 
Zitat:

Zitat von Fussel9
Es gibt auch schon das nächste Problem mit meiner alternativ Lösung:


Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
name:=EName.Text;
...

Das ist übrigens keine gute Idee. Die Eigenschaft "Name" besitzt jede Komponente. In deinem Fall wird Form1, also dem Fenster-Formular ein neuer Name verpaßt. Wenn du Glück hast und den Namen nicht irgendwo anders benutzt, dann merkst du es nicht. Aber spätestens bei nicht erlaubten Zeichen knallt es.

mkinzler 22. Jun 2009 19:54

Re: Reload
 
Zitat:

Das ist übrigens keine gute Idee. Die Eigenschaft "Name" besitzt jede Komponente. In deinem Fall wird Form1, also dem Fenster-Formular ein neuer Name verpaßt. Wenn du Glück hast und den Namen nicht irgendwo anders benutzt, dann merkst du es nicht. Aber spätestens bei nicht erlaubten Zeichen knallt es.
Zitat:

Zitat von DeddyH
Name ist ein ganz blöder Name für eine Variable,


himitsu 22. Jun 2009 19:57

Re: Reload
 
nur noch mal kurz zum Hier im Forum suchenShellExecute und da es eine WinAPI ist, noch MSDN-Library durchsuchenShellExecute

oder einfach mal Strg+Shift+F Verzeichnis "C:\Programme\CodeGear\" und Suchwort "ShellExecute"

DeddyH 22. Jun 2009 19:58

Re: Reload
 
Zitat:

Zitat von DeddyH

Schreib ich hier mit Geheimtinte oder wieso überliest mich jeder in diesem Thread?

mkinzler 22. Jun 2009 20:00

Re: Reload
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von DeddyH

Schreib ich hier mit Geheimtinte oder wieso überliest mich jeder in diesem Thread?

Nicht nur dich. Langsam sollte er die Suchbegriffe kennen und auch die geheime F1-Taste

Popov 22. Jun 2009 20:00

Re: Reload
 
Zitat:

Zitat von mkinzler
Zitat:

Auf der anderen Seite sind wahrscheinlich 99,99% alle Suchergebnisse die, daß man gebeten wird die Suche zu bemühen Grübelnd...

Also ausnahmsweise Wink
Und das Betätigen der F1-Taste kann man ja wirklich keinem zumuten. :stupid:

ShellExecute ist API und sollte bei F1 eigentlich nicht angezeigt werden. Ich glaube mal eine englische Version irgendwo gesehen zu haben, aber keine Ahnung wo.

Die Muhkuh 22. Jun 2009 20:03

Re: Reload
 
Zitat:

Zitat von Popov
Zitat:

Zitat von mkinzler
Zitat:

Auf der anderen Seite sind wahrscheinlich 99,99% alle Suchergebnisse die, daß man gebeten wird die Suche zu bemühen Grübelnd...

Also ausnahmsweise Wink
Und das Betätigen der F1-Taste kann man ja wirklich keinem zumuten. :stupid:

ShellExecute ist API und sollte bei F1 eigentlich nicht angezeigt werden. Ich glaube mal eine englische Version irgendwo gesehen zu haben, aber keine Ahnung wo.

Was ich auch schon geschrieben habe.

Wenn man natürlich das WinSDK in die Hilfe eingebunden hat, sieht man es auch per F1, ansonsten nur im MSDN...

mkinzler 22. Jun 2009 20:07

Re: Reload
 
Zitat:

Wenn man natürlich das WinSDK in die Hilfe eingebunden hat, sieht man es auch per F1, ansonsten nur im MSDN...
Was bei den neueren Delphiversionen automatisch der Fall ist.

himitsu 22. Jun 2009 20:08

Re: Reload
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Die Muhkuh
ShellExecute ist API und sollte bei F1 eigentlich nicht angezeigt werden. Ich glaube mal eine englische Version irgendwo gesehen zu haben, aber keine Ahnung wo.

Wenn man natürlich das WinSDK in die Hilfe eingebunden hat, sieht man es auch per F1, ansonsten nur im MSDN...[/quote]

die sollte in D2007 doch eigentlich mit dabei sein?

Die Muhkuh 22. Jun 2009 20:10

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 19:08 Uhr.
Seite 1 von 3  1 23      

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