Evenement de fermeture de form avec C++ Builder 6

Signaler
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,

J'ai un soucis pour avoir mon evement pour la fermeture de la fenetre.

Je pensais que ce code etait bon mais le deboger me dit qu'il n'existe pas.

void __fastcall TForm1::FormClose(TObject *Sender){
}

Quelqu'un a une idée ?

Merci

[PaTaTe]

5 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,


Tu as connecté ta méthode avec ton évènement ?

Dans la fenêtre des propriétés de ta form, tu as un onglet évènement ou quelque chose comme ça.

Tu cherche ensuite le onclose, et tu double clique dans la case à droite.

Ca te met dans le code ci-dessus.
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
2
Oui j'ai mais je ne peux rien y faire la liste est vide.

[PaTaTe]
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Je lance C++ Builder 6.

Il propose automatiquement un projet avec une form.

Je l'enregistre (Fichier->Tout enregistrer).

Je m'assure que la form Form1 est sélectionnée dans l'Inspecteur d'objet.

Je clique sur l'onglet Evénements de ce même inspecteur.

Deux colonnes. La colonne de gauche est la liste des évènements pouvant
survenir dans la vie de ma Form. La colonne de droite est vide
actuellement, et contient une liste de noms de méthodes. Ces méthodes
seront appelés automatiquement lorsque les évènements auront lieu.

Je repère l'évènement OnClose.

Je double clique sur la case vide à droite de cet évènement.

C++ Builder va alors choisir automatiquement un nom pour la méthode (On peut le choisir si on veut), et va faire 3 choses :


1 Ajouter l'implémentation au code de la form, l'afficher et mettre le
curseur dedans pour que l'on puisse coder la méthode en question.

2 Ajouter la déclaration de cette méthode, dans Unit1.h.

3 Modifier le fichier descriptif de la form, Unit1.dfm, en lui ajoutant la ligne :   OnClose = FormClose


Attention, si on n'ajoute pas de code dans la méthode et que l'on
sauvegarde, C++ Builder vire tout ça. Pour supprimer la méthode
proprement, il faut effetivement supprimer le code qu'il y a dedans, et
sauvegarder : C++ Builder enlèvera alors l'implémentation, la
déclaration, et la ligne dans Unit1.dfm.


Bien. Implémentons la méthode :


void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

  ShowMessage("Les évènement sous C++ Builder 6, c'est trop simple et pratique");

}


Un coup de F9, la form s'affiche, on clique sur sa croix, le message s'affiche, on ferme le message, la form disparaît.
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
2
J'ai deja tenté ça mais le compilo me dit que le membre OnClose n'existe pas pour la form. Si ça avait été aussi simple, j'aurais réussis ... :(

[PaTaTe]
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Si tu regardes ci-dessus, tu vois que la Form n'a effectivement pas de membre OnClose, mais un membre FormClose.


Le nom de la méthode dans la colonne de droite des évènements doit correspondre avec le nom de la méthode dans ton code.


Vérifie que tu as bien mis FormClose dans la colonne évènement, ou renomme ta méthode... Bref, fait concorder.


Vérifie que tout concorde comme je le décrit plus haut :

  Déclaration dans le .h, avec le bon proto.

  Implémentation dans le .cpp.

  Lien évènement/méthode dans le .dfm.