| ON_CLOSE | |
|
|
Auteur | Message |
---|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: ON_CLOSE Dim 2 Fév 2014 - 12:27 | |
| Avec On_Close on peut intercepter la fermeture d'un programme par la croix, mais à ma connaissance on ne peut pas l'annuler ? En fait je renvoie le traitement d'un bouton 'Quitter' et du On_Close au même sous-programme, mais les conséquences ne sont pas les mêmes. Par exemple je peux afficher un message du genre: "Voulez-vous vraiment quitter ?", ou "Voulez-vous enregistrer le travail en cours ?" mais quoi qu'on fasse ça va se terminer, c'est bien ça ?
Réflexion faite, on peut quand même faire un traitement avant la fermeture inéluctable, par exemple enregistrer un fichier. | |
|
| |
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 12:38 | |
| Effectivement, on ne peut pas l'annuler. Cet évènement est conçu pour effectuer des actions indispensables avant la fermeture, comme par exemple sauvegarder le contenu de certains objets (momo, grid, ...).
| |
|
| |
papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 12:59 | |
| - JL35 a écrit:
- Par exemple je peux afficher un message du genre: "Voulez-vous vraiment quitter ?", ou "Voulez-vous enregistrer le travail en cours ?" mais quoi qu'on fasse ça va se terminer, c'est bien ça ?
J’ai rien pigé ! Ce code ne fait pas l’affaire ? - Code:
-
dim rep$ rep$ = message_warning_yes_no("Vous voulez vraiment quitter ?") select val(rep$) case 0 message "Vous avez fermé par la croix" +chr$(13) + "Ma question ne vous intéresse pas" case 1 message "Vous avez choisi YES" + chr$(13) + "Bye Bye !!" terminate case 2 : message "Vous avez choisi NO" + chr$(13) + "Je continue alors" end_select
EDIT : Avec un peu (beaucoup) de retard j’ai enfin compris ta question JL35. On ne peut annuler le On_Close 0. Alors, si on a l’intention de pouvoir l’annuler, mieux vaut ne pas l’utiliser ! Il y en a certainement une alternative à cela !
Dernière édition par papydall le Dim 2 Fév 2014 - 13:11, édité 1 fois | |
|
| |
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 13:10 | |
| Je pense que la question se rapportait à l'arrêt d'un programme par la croix rouge. So cela a été fait, le on_close est activé, mais il n'y a aucun moyen de l'empêcher. KGF.dll contient une fonction qui permet de désactiver la croix rouge: - Code:
-
res% = DLL_call2("SetCloseBox",hnd%,mode%) avec mode%=0, il n'y a plus de croix rouge ! | |
|
| |
Invité Invité
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 13:18 | |
| Tiens, c'est nouveau cela. Cela ne marchait pas avant! Même si on voulait annuler, cela ne fonctionnait pas. Le seul c
Tu m'as troublé Papydall. C'est avec ON_CLOSE, pour programmer la fermeture par la croix. Evidemment ton programme fonctionne avec un message, mais on_close ferme après-coup le programme.
Si on veut éviter de fermer par mégarde, il y a deux solution: soit on intercepte la croix avec une fonction de la dll de Klaus, pour la rendre inactive, soit systématiquement, on met la fenêtre zéro à hide, pour tout mettre dans une autre forme. car dans une fenêtre fille, on peut fermer la fenêtre sans fermer le programme, et la réouvrir par les instructions.
Il y a un croisement avec Klaus que je salus. Tout est dit.
Edit crois =>> croix
|
|
| |
papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 14:54 | |
| On peut éviter de fermer par mégarde la FORM 0 par la croix rouge, en prenant les choses en main. - Code:
-
label close print "cliquez sur la croix rouge" on_close 0,close end rem ============================================================================ close: verif() return rem ============================================================================ sub verif() dim_local rep$ rep$ = message_warning_yes_no("Vous voulez vraiment quitter ?") select val(rep$) case 0 message "Vous avez fermé par la croix" +chr$(13) + "Ma question ne vous intéresse pas" continue() case 1 message "Vous avez choisi YES" + chr$(13) + "Bye Bye !!" terminate case 2 message "Vous avez choisi NO" + chr$(13) + "Je continue alors" continue() end_select end_sub rem ============================================================================ sub continue() ' Ici on code les appels vers les différents sous-programmes message "Le programme continue de tourner ..." cls print "Tourne, tourne ma toupie" print "Toune tourne encore!" message "Terminé" end_sub rem ============================================================================
| |
|
| |
Invité Invité
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 15:04 | |
| J'ai cru un instant que cela avait changé, sauf que ce n'ai pas vrai.
Si on clique sur "continue" le programme continue jusqu'à "terminé", et là le programme se ferme. Dès que tu quittes la sub, on ne peux plus continuer, c'est fermé! Le END ne reprend pas la main pour un autre clic. |
|
| |
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLOSE Dim 2 Fév 2014 - 18:17 | |
| Merci à tous pour vos interventions (j'étais absent), mais finalement c'est ce que j'en avais déduit: on a la possibilité de sauvegarder la situation avant fermeture inévitable à la fin du s/p appelé par On_Close, et c'est ce que je voulais.
La fermeture définitive et sans appel doit intervenir au moment précis du Return du s/p de traitement du On_Close. Donc s'il y a quelque chose à faire, il faut le faire avant, mais ça laisse quand même des possibilités. | |
|
| |
Invité Invité
| Sujet: Re: ON_CLOSE Lun 3 Fév 2014 - 10:49 | |
| Histoire de tourner en rond. Mais attention, à chaque fois on augmente le compteur. (Ca ne fonctionne qu'avec des sous-programmes. - :
- Code:
-
label close , verif , continue dim rep$ , compte% print "cliquez sur la croix rouge" on_close 0,close end rem ============================================================================ close: compte% = compte% +1 : caption 0, compte% gosub verif compte% = compte% -1: caption 0, compte% return
verif: compte% = compte% +1 : caption 0, compte% rep$ = message_warning_yes_no("Vous voulez vraiment quitter ?") select val(rep$) case 0 message "Vous avez fermé par la croix" +chr$(13) + "Ma question ne vous intéresse pas" gosub continue case 1 message "Vous avez choisi YES" + chr$(13) + "Bye Bye !!" terminate case 2 message "Vous avez choisi NO" + chr$(13) + "Je continue alors" gosub continue : caption 0, compte% end_select compte% = compte% -1 return rem ============================================================================ continue: compte% = compte% +1 : caption 0, compte% ' Ici on code les appels vers les différents sous-programmes message "Le programme continue de tourner ..." cls print "Tourne, tourne ma toupie" print "Toune tourne encore!" message "Terminé" gosub verif compte% = compte% -1 : caption 0, compte% return rem ============================================================================
|
|
| |
Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: ON_CLOSE Lun 3 Fév 2014 - 11:25 | |
| Oui, Cosmos, çà marche. Mais bon, c'est pas le but initiale de ON_CLOSE (je me doute bien que tu le sais). Tu nous as démontré que quand on veut, on peut. A+ | |
|
| |
Invité Invité
| Sujet: Re: ON_CLOSE Lun 3 Fév 2014 - 12:14 | |
| - Jean-Claude a écrit:
- je me doute bien que tu le sais
C'est sûre que je le savais. Je voulais seulement voir, si on pouvait rester à un return en attente, ou si celui-ci s'incrémentait. Il s'incrémente, et à 1000 c'est fini! C'est capri Jean-Claude ? (Capri c'est fini!) |
|
| |
Contenu sponsorisé
| Sujet: Re: ON_CLOSE | |
| |
|
| |
| ON_CLOSE | |
|