Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| MARK_ON déclenche un événement ON_CLICK à la place de ... | |
| | Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 11:01 | |
| Description du problème: MARK_ON déclenche un événement ON_CLICK sur un CHECK à la place de l'utilisateur, si ce ON_CLICK N,LABEL a été déclaré avant l'utilisation de MARK_ON. C'est la même chose pour MARK_OFF. Par contre c'est un peu différent pour OPTION: MARK_OFF ne déclenche pas d’événement. Pour le moment, je me suis positionné dans la rubrique "à l'aide".... Mais je trouve ce fonctionnement curieux. Il me semble que ce sujet a déjà été évoqué, mais je ne le retrouve pas. - Code:
-
label Click rem créer un CHECK CHECK 1 ' OPTION 1 on_click 1,Click : ' ce on_click est pris en compte par mark_on de la ligne 9 (???) rem attendre 1 seconde wait 1000 rem le cocher mark_on 1 : ' est pris en compte comme un click de l'utilisateur (???) rem attendre 1 seconde wait 1000 rem le décocher mark_off 1 : ' par contre ici il n'y a pas de prise en compte comme un click SI C'EST UN OPTION ' Autre remarque: si on place ON_CLICK après MARK_OFF il n'y a pas de simulation d'un click utilisateur ' on_click 1,Click END
Click: message "L'utilisateur n'a pas cliqué sur le CHECK 1,"+chr$(13)+"Conclusion: mark_on 1 a simulé le click de l'utilisateur par programme,"+chr$(13)+"Comme si on avait un TRIGGER_CLICK ???" RETURN
A mon sens, MARK_ON et OFF ne devrait pas déclencher un événement ON_CLICK même si cet événement a été déclaré, ce n'est pas son rôle A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 11:44 | |
| Je connaissais ce comportement, et pour cette raison, je fais systématiquement OFF_CLICK avant de toucher à l'état d'un OPTION ou CHECK, par programme. Puis, on ON_CLICK derrière.
Maintenant, est-ce que ce comportement a un sens, faudra voir avec Jack. Ce que je sais, c'est qu'en Delphi, le comportement est identique. Tout changement d'un CHECK, que ce soit par un clic de souris ou une commande par logiciel, déclenche l'évènement. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 12:17 | |
| Je me doutais que ce n'était pas un bug, mais un choix de Jack. J'ignore si c'est une raison purement technique.
Si le programmeur souhaite simuler un click sur un CHECK il peut utiliser TRIGGER_CLICK. MARK_OFF ne devrait servir uniquement qu'à cocher visuellement le CHECK car nous disposons de toutes les commandes pour gérer les événements pour CHECK et OPTION.
Reste à savoir ce que Jack en pense.
Ta solution de dépannage avec OFF_CLICK, Klaus, est valable, mais pas toujours possible. Je bricolerais un petit code dans l'après-midi pour illustrer mon propos.
A+
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 14:44 | |
| Bon ben j'ai bricolé un code comme prévu, mais ça n'apporte rien à ce que je voulais démontrer. Mon code fonctionne parfaitement malgré l'événement déclenché par MARK_ON. Je le publie quand même, mais ATTENTION il y a création d'un fichier, donc enregistrer le code dans un dossier. Le but de ce code est d'autoriser l'accès à un programme par un mot de passe avec l'option pour l'utilisateur de le mémoriser ou pas. Le programme gère l'activation des objets en fonction de l'état du CHECK de mémorisation. Quand l'utilisateur clique sur le CHECK il modifie la mémorisation du mot de passe pour le prochain lancement du programme. Pour comprendre mieux faite le tourner plusieurs fois avec ou sans la mémorisation. - Code:
-
dim no%,mdp$,MemoriseMdp$ font_bold 0 : height 0,200 : top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2 dir_change dir_current$ if file_exists("MotDePasse.txt")=0 then CreateFichierMotDePasse():' création du fichier obj() :' Création des objets gosub Start
END rem ============================================================================ Start: ' initialise mark_off CheckMemorisMdp% : inactive CheckMemorisMdp% : inactive BtValide% ' on commence par charger le fichier clear Dlist1% : file_load Dlist1%,"MotDePasse.txt" ' on affecte le contenu du fichier aux variables correspondantes mdp$=item_read$(Dlist1%,1) : MemoriseMdp$=item_read$(Dlist1%,2) ' Suite du programme en fonction de l'état de la varible MemoriseMdp$ if MemoriseMdp$="Oui" active CheckMemorisMdp% : mark_on CheckMemorisMdp% text Edit1%,mdp$ : active BtValide% : set_focus BtValide% else mark_off CheckMemorisMdp% : active Edit1% : set_focus Edit1% end_if ' en attente d'un événement RETURN
Memorisation: ' Si on est là c'est qu'il y a eu un click sur le CHECK CheckMemorisMdp% if checked(CheckMemorisMdp%)=1 then MemoriseMdp$="Oui" :' message MemoriseMdp$ if checked(CheckMemorisMdp%)=0 then MemoriseMdp$="Non" :' message MemoriseMdp$ ' enregistrer la modif dans le fichier (par remplacement du fichier) file_open_write 1,"MotDePasse.txt" : file_writeln 1,mdp$ : file_writeln 1,MemoriseMdp$ : file_close 1 RETURN
CtrlMdp: if key_up_code=13 then gosub CtrlMdp2 RETURN
CtrlMdp2: ' contrôle du mdp if text$(Edit1%)<>mdp$ then message "Mot de passe incorrect !" : text Edit1%,"" : return ' Si on est là c'est que la saisie est OK active CheckMemorisMdp% : active BtValide% RETURN
Valide: message "L'accès au programme est autorisé." ' EXECUTE le programme terminate RETURN
SUB obj() ' dim et label dim Dlist1%,Edit1%,CheckMemorisMdp%,BtValide% label Start,Memorisation,CtrlMdp,CtrlMdp2,Valide ' Dlist1% pour travailler sur le fichier no%=no%+1 : Dlist1%=no% : dlist no% ' Alpha Edit1% no%=no%+1 : alpha no% : caption no%,"Entrez votre mot de passe: (Bonjour)" : top no%,5 : left no%,5 ' Edit1% por saisir le mot de passe no%=no%+1 : Edit1%=no% : edit no% : top no%,top(no%-1)+20 : left no%,5 ' CheckMemorisMdp% no%=no%+1 : CheckMemorisMdp%=no% : check no% : top no%,top(no%-1)+50 : left no%,5 width no%,300 : caption no%,"Mémoriser le mot de passe ? (coché=Oui)" ' BtValide% no%=no%+1 : BtValide%=no% : button no% : top no%,top(no%-1)+50 : left no%,5 caption no%,"Valider" ' initialise inactive CheckMemorisMdp% : inactive BtValide% ' les événements on_click CheckMemorisMdp%,Memorisation : on_key_up Edit1%,CtrlMdp : on_click BtValide%,Valide END_SUB
SUB CreateFichierMotDePasse() file_open_write 1,"MotDePasse.txt" : file_writeln 1,"Bonjour" : file_writeln 1,"Non" : file_close 1 END_SUB
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 15:48 | |
| Même avec un objet inactivé, le ON_CLICK se déclenche toujours par la commande MARK_xxx. Fais comme ceci: - Code:
-
Start: ' initialise off_click CheckMemorisMdp% mark_off CheckMemorisMdp% inactive CheckMemorisMdp% : inactive BtValide% ' on commence par charger le fichier clear Dlist1% : file_load Dlist1%,"MotDePasse.txt" ' on affecte le contenu du fichier aux variables correspondantes mdp$=item_read$(Dlist1%,1) : MemoriseMdp$=item_read$(Dlist1%,2) ' Suite du programme en fonction de l'état de la varible MemoriseMdp$ if MemoriseMdp$="Oui" active CheckMemorisMdp% : mark_on CheckMemorisMdp% text Edit1%,mdp$ : active BtValide% : set_focus BtValide% else mark_off CheckMemorisMdp% : active Edit1% : set_focus Edit1% end_if on_click CheckMemorisMdp%, Memorisation ' en attente d'un événement RETURN Il n'y aura plus de ON_CLICK intempestifs. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... Mer 18 Oct 2017 - 17:08 | |
| Oui ta solution est bonne.
Et du coup, je me suis rappelé pourquoi j'avais un problème: J'avais une apparition intempestive d'un message.
Donc, il y a 2 conditions pour ne pas avoir d'événements ON_CLICK intempestif: 1) il faut un OFF_CLICK N placé avant MARK_ON N 2) la déclaration ON_CLICK N,LABEL doit obligatoirement être placée après MARK_ON N (N étant un CHECK ou une OPTION)
Finalement même si mon interrogation du départ sur le déclenchement d'un événement avec MARK_ON reste valable, on a une solution de contournement.
A+ | |
| | | Contenu sponsorisé
| Sujet: Re: MARK_ON déclenche un événement ON_CLICK à la place de ... | |
| |
| | | | MARK_ON déclenche un événement ON_CLICK à la place de ... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |