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
Version imprimable
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) :
lanonymeCode:
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:
1
2
3
4
5 void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Application->Terminate(); }
Quel est la difference entreetCode:Form1->Close();
??Code: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().Citation:
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();Citation:
Envoyé par cstan
Terminate();Citation:
Envoyé par Aide de Borland
A toi de conclure :PCitation:
Envoyé par Aide de Borland
lanonyme
Ca me parait evident :mouarf3:
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:
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... :oops: :oops: