Fermeture du projet

Résolu
youhibadelphi Messages postés 187 Date d'inscription jeudi 16 octobre 2008 Statut Membre Dernière intervention 20 février 2010 - 26 août 2009 à 10:00
driver1974 Messages postés 1 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 21 mai 2010 - 21 mai 2010 à 01:08
Salut
Dans un bouton j'ai écris le code suivant pour fermer mon projet:

var rep:word;
Begin
rep:=messagedlg('etes vous sur de vouloir quitter'),mtinformation,[mbyes,mbcancel],0);
if rep=mryes then begin
application.terminate;
end;
end;
le bouton ça marche bien mais quand j'ai ajouté le code dans l'événement on close de la form principal
Le projet se ferme avec le clic sur le ok et sur le bouton annuler du message.



yahia

10 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
26 août 2009 à 12:10
et si tu veux mettre ta confirmation quand on click sur la croix rouge (qui a mon avis est plutot ce que tu veux), utilise OnCloseQuery (et affecte caNone à CloseAction si tu veux annuler)
3
youhibadelphi Messages postés 187 Date d'inscription jeudi 16 octobre 2008 Statut Membre Dernière intervention 20 février 2010 3
26 août 2009 à 15:39
je m'excuse et je me corrige le code proposé par andry ça marche pas, j'ai essayé un autre code
if messagedlg('etes vous sur de vouloir quitter'),mtinformation,[mbyes,mbcancel],0) = mrcancel then CanClose :=false;


yahia
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
26 août 2009 à 10:14
procedure TForm1.BitBtn1Click(Sender: TObject);
var
rep:word;
Begin
 rep:= messagedlg('etes vous sur de vouloir quitter', mtinformation, [mbyes,mbcancel], 0);
 if rep=mryes then
  application.terminate;
end;



bonjour,

n'oublie pas la balise code..

oui, c'est normal puisque l'évènement OnClose ira jusqu'à son terme car rien ne l'arrêtera et donc fermera la forme et si elle est principale alors l'application se ferme aussi.

si tu veux fermer ton projet le bouton sur la forme est suffisant..

cantador
0
youhibadelphi Messages postés 187 Date d'inscription jeudi 16 octobre 2008 Statut Membre Dernière intervention 20 février 2010 3
26 août 2009 à 13:04
salut
mon ami cantador merci pour le conseil, et merci pour la solution mon ami Guillemouze.
autre solution propsé par Andry sur le forum developpez.com
CanClose :messagedlg('etes vous sur de vouloir quitter'),mtinformation,[mbyes,mbcancel],0) mrYes;
dans l'evenement onCloseQuery de ta forme.
merci


yahia
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
26 août 2009 à 15:25
oui la solution de Andry fonctionne pour la fermeture d'une forme..

mais si celle-ci n'est pas la forme principale
le projet ne se fermera pas.

cantador
0
youhibadelphi Messages postés 187 Date d'inscription jeudi 16 octobre 2008 Statut Membre Dernière intervention 20 février 2010 3
26 août 2009 à 15:44
Oui cantador la question concerne la fermeture du projet et je crois qu'on parle de la form principale ici.
yahia
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
26 août 2009 à 16:19
Juste une remarque ne mets pas de code sans l'évènement car au bout d'un moment on ne sait plus de quoi on parle et n'oublie pas la balise.

je te corrige :

l'evènement OnCloseQuery permet de conditionner l'évènement OnClose car le premier se déclenche avant le second ce qui permet de fixer des règles quant à la fermeture de la forme.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose :messagedlg('etes vous sur de vouloir quitter',mtinformation,[mbyes,mbcancel],0) mrYes;
end;


autrement dit si l'utilisateur clique sur Oui
alors la valeur de CanClose est true.
et donc l'evènement OnClose peut s'effectuer sans problème (ex : un clic sur la croix de fermeture)

et à l'inverse tu l'auras compris si c'est non alors la forme ne se fermera pas.
(très pratique s'il on veut par exemple éviter une fermeture intempestive de la forme pendant une opération d'écriture..)

et si cette forme est la forme principale
(déclarée comme telle dans delphi..)
alors sa fermeture si elle est autorisée fermera aussi l'application.

mais attention tout de même car dans certaines situations cela ne se passe pas très bien..
->>> voir sujets de discussions à ce propos..

et pour finir...

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate;
end;


ferme convenablement le projet.

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 août 2009 à 05:58
D'après ce que j'ai compris de ton problème :

procedure TForm1.Button1Click(Sender: TObject);
begin
 Close;
end;
 
procedure TForm1.OnClose(Sender: TObject; Action: TCloseAction);
begin
 if MessageDlg('Etes-vous sûr de vouloir quitter', mtinformation, [mbyes,mbcancel], 0) = mrNo then Action := caNone;
end;


N'oublie pas de lier les méthodes depuis l'inspecteur d'objets ...

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 août 2009 à 05:59
Oops ... lire :

if MessageDlg('Etes-vous sûr de vouloir quitter', mtinformation, [mbyes,mbNo], 0) = mrNo then ...

Ca paraît logique, puisqu'on pose une question qui attend une réponse par Oui ou Non, et non pas par Oui ou Annuler ...

Cordialement, Bacterius !
0
driver1974 Messages postés 1 Date d'inscription mercredi 9 mai 2007 Statut Membre Dernière intervention 21 mai 2010
21 mai 2010 à 01:08
berhoumi merci
0
Rejoignez-nous