Bonjour tout le monde,
Est-il possible de redémarrer son application sur un clique bouton ?
Si oui comment faire ?
A plus
Bonjour tout le monde,
Est-il possible de redémarrer son application sur un clique bouton ?
Si oui comment faire ?
A plus
Oui
je suis dans mon application, et je voudrais savoir si :
1) je peux la fermer (sa j'y arriverais par un terminate)
2) la redémarrer.
![]()
Je vois un truc du genre :
1. Récupérer le chemin de l'EXE de ton programme
2. Ensuite Pointer un ShellExecute dessus.
Ou d'ajouter du code dans ton OnClose pour relancer la bête.
@+
Effectivement sa à l'air d'être la solution.
J'ai aussi trouver cela sur le forum*
http://www.developpez.net/forums/d62...r-application/
Je test.
Je viens de tester et ça fonctionne impec :
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.Button5Click(Sender: TObject); begin Close; ShellExecute(0,'OPEN','Project1.exe', Nil, Nil, SW_SHOW); end;
Re,
Alors en fait c'est plus compliquer que cela...
Je m'explique :
Je suis dans une form principal et je fais appel à une autre form comme ceci
Pour info La procédure create et close de ma form principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure TFPrincipal.Activation1Click(Sender: TObject); begin With TForm2.Create(Self) do Begin Try if ShowModal = mrOk Then Begin redemarrerApplication := True; FPrincipal.Close; end; finally Free; end; end; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TFPrincipal.FormCreate(Sender: TObject); Begin redemarrerApplication := False; end;Et voilà ce que je fais dans ma form2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TFPrincipal.FormClose(Sender: TObject; var Action: TCloseAction); begin if redemarrerApplication then Begin ShellExecute(0,'OPEN',PChar(Application.ExeName),nil,nil,SW_SHOWNORMAL); end; Application.Terminate; end;
Mon Boutton est en mrNone au départ
Il ne ce pass rien !! l'application ne redémarre pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 procedure TFActivation.JvXPButton2Click(Sender: TObject); begin ModalResult := mrNone; With idFTP1 do Begin Host := 'xxxxxxxxxxx'; Username := 'xxxxxxxxxxx'; Password := 'xxxxxxxxxxx'; Try Try //... Showmessage('l''application va redémarrer pour terminer les modifications.'); ModalResult := mrOk; except Showmessage('Votre compte n''est pas encore activé.'); end; finally Disconnect; end; end; Close; end;
Et je vois pas pourquoi ?
Un petit coup de main ?
Merci.
Mais est-ce que la première se termine ?Il ne ce pass rien !! l'application ne redémarre pas...
Essaye déjà simplement de démarrer une 2ème instance de ton application par ShellExecute.
Si elle ne démarre pas, as-tu un mutex pour limiter ton programme à une instance ?
Si oui, tu devrais le libérer avant ShellExecute.
ps: Un Close de la fiche principale entraîne un Terminate de l'application. Terminate n'est pas utile dans le OnClose. Par contre, tu pourrais l'utiliser depuis le fiche secondaire pour terminer le programme sans passer par la fiche principale.
Salut Andnotor,
Alors, en fait c'est mon close de mon jvxpButton2 qui me génait, mais ce n'ai pas tout.
L'application et le redémarrage fonctionne mais seulement au deuxième clique sur mon boutton de ma deuxieme form !!! comme si il ne prenait mon modalresult qu'a ce moment là !!
Ok pour le terminate.
Tu dis de le mettre (terminate) t'en cas faire dans ma deuxième form, mais j'ai des query et table et form qui peuvent être ouvertes dans ma form principal et dans le close je ferme tout avant de couper, j'ai peur des fuites de mémoire si je fais un terminate dans cette fenêtre ?
Qu'en penses-tu ?
moi j'ai une variable needrestart a false dans le create
mes sauvegarde etc dans le onclosequery et onclose
et dans le destroy si needrestart à true je lance
j'ai jamais eu de soucis je met ma variable à true et j'appèle close;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Procedure TfmMain.FormDestroy(Sender: TObject); Begin If NeedRestart Then ShellExecute(Application.Handle, 'open', PChar(Application.ExeName), '', '', SW_SHOW); End;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager