salut
Dans une application , je souhaite la fermer en utilisant la petite croix en heut a droite , cela fonctionne sur la premiere Form mais pas sur les autres , pk et comment y remedier ?
merci d avance de vos reponses
salut
Dans une application , je souhaite la fermer en utilisant la petite croix en heut a droite , cela fonctionne sur la premiere Form mais pas sur les autres , pk et comment y remedier ?
merci d avance de vos reponses
La petite croix en haut à droite, utilise l'evenement OnCLose de sa form.
Si tu est toujours dans le meme projet que precedement, je te dirai que pour quitter ton application ( vu que ta Form1 est ta form principal) :
lanonyme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void __fastcall TfrmPrincipal::FormClose(TObject *Sender, TCloseAction &Action) { Form1->Close() ; }
Dans les autres tu mets sur l'événement OnClose
ex pour Form2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Application->Terminate(); }
Quel est la difference entreet
Code : Sélectionner tout - Visualiser dans une fenêtre à part Form1->Close();??
Code : Sélectionner tout - Visualiser dans une fenêtre à part Application ->Terminate();
Si vous êtes dans une méthode de la classe principale Form1, il est inutile de préfixer l'instruction par Form1->, on écrit simplement Close().Envoyé par nemo69500
Sinon, il semble qu'Application ->Terminate() soit quelque chose de plus violent que le normal Close(). On peut utiliser la première syntaxe n'importe où dans le code, en pleine boucle, par exemple, si une erreur est survenue. Alors que Close() est une fin normale d'exécution.
Je ne relate ici que mon expérience propre, si quelque autre expert pouvait confirmer, voire ajouter un détail, ce serait bien.
À bientôt
Gilles
L'appel de Application->Terminate() ne provoque pas l'appel de l'évènement OnClose. J'ai constaté qu'avec Application->Terminate(), ça ne provoque pas d'erreur si des fenêtres modales sont ouvertes, contrairement à FormClose().
Et la fonction abort(); ? Elle fait quoi de plus que le Terminate();
merci
Bonjour,
Abort();Envoyé par cstan
Terminate();Envoyé par Aide de Borland
A toi de conclureEnvoyé par Aide de Borland
![]()
lanonyme
Voilà, finalement, Terminate() n'est pas assez violent, alors j'utilise Abort() qui au final me créé quand même une série d'exception. Plus exactement, si je sors dans la première fiche créer par Abort() alors je n'ai pas de problème, l'application se termine sans faire d'histoire, c'est super. Par contre si c'est la deuxième, je ne sais pas pourquoi mais une exception est levée (EAccessViolation, un truc comme ça parceque j'ai lu à une adresse interdite $40) et cette exception se déclenche plusieurs fois.
Imaginons que la deuxième forme créer s'appelle form2, j'ai essayé de faire dans la première forme créer
Mais j'ai quand même une erreur, pourtant théoriquement cette forme est détruite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (bigError == true) { form2->Close(); // j'ai essayé avec un form2->Release() aussi. Abort();
PS: je ne comprends pas lorsque la ligne Terminate() est lue, le programme continue a créer les formes qui ne l'ont pas encore été.
Scusez je me suis trompez de discussion. Il s'agit d'un lien se trouvant dans mon post jusqu'ici...![]()
![]()
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