Correction d'un bogue avec les événements de clavier dans MouseBoxConsidérez le code ci-dessous :
Names Default To Here( 1 );
New Window( "SetKey Example", mb = MouseBox( tb = Text Box( "Press a key." ) ) );
mb << setkey( Function( {this, key}, show( key ) ) );
mb << setkeyenable( 1 );
mb << setfocus;En appuyant sur un bouton, tel que K , entraîne l'exécution de la fonction attachée deux fois.Il est clair que l'on peut produire une solution de contournement avec un timing et autres, mais je pense que même les développeurs JMP considéreraient que de telles solutions de contournement basées sur l'utilisateur sont malheureuses.
Qu'est-ce qui a inspiré cette demande de liste de souhaits ?
Quelle est l'amélioration que vous aimeriez voir?
Pourquoi cette idée est-elle importante ?
Automatisation et scriptRe : Correction d'un bogue avec les événements de clavier dans MouseBoxWow, quelle fonctionnalité sympa : setkey !
Merci d'avoir mentionné...
Néanmoins, question vraiment étrange!
étonnamment, la fonction n'est pas toujours déclenchée deux fois (voir a,b,r,t,z) et pour Return (et Enter), on obtient un End supplémentaire :
Jmp17 avec clavier allemand :

Re : Correction d'un bogue avec les événements de clavier dans MouseBoxJe me demandais si c'était dû au fait d'appuyer sur la touche et de la relâcher à nouveau.
Mais lorsque vous maintenez la touche enfoncée, la fonction se déclenche encore et encore.
Le résultat est particulièrement intéressant lorsque l'on appuie sur retour. Alors c'est:

Re : Correction d'un bogue avec les événements de clavier dans MouseBoxJe me suis demandé combien de temps il fallait entre les deux déclencheurs de la commande - et ce faisant, j'ai trouvé une solution simple :
faites juste la commande légèrement plus long que show(key) - et c'est juste déclenché 1x 
La première fonction est déclenchée deux fois :

décommenter la deuxième fonction (légèrement plus longue) résout le problème :

Names Default To Here( 1 );
time0 = 0;
doSomething = Function( {this, key},
time = HP Time();
Write("\!n v1: ",key," ", time);
);
doSomething2 = Function( {this, key},
time = HP Time();
dt = (time - time0)/1000000;
Write ( "\!n v2: ", key," ", dt);
time0 = time;
);
New Window( "SetKey Example",
H List box(mb = MouseBox( tb = Text Box( "Press a key." )), Button Box ("save", onSave()))
);
mb << setkey( Function( {this, key}, doSomething( this, key ) ) );
//mb << setkey( Function( {this, key}, doSomething2( this, key ) ) );
mb << setkeyenable( 1 );
mb << setfocus;
Re : Correction d'un bogue avec les événements du clavier dans MouseBox - Statut changé en : AcquisSalut @ErraticAttack , et tous ceux qui ont commenté. Cela ressemble à un bug. Nous partageons avec notre support technique.
Re : Correction d'un bogue avec les événements de clavier dans MouseBoxMalheureusement, la documentation de Mouse Box n'est pas tout à fait complète.Nous sommes au courant, et c'est sur la liste à corriger.En attendant, sachez que le message << Set Key est conçu pour répondre à une valeur de retour "booléenne" de la fonction jointe.Si la fonction renvoie "true" (comme 1), cela indique à Set Key que l'appui sur la touche a été traité et vous n'obtiendrez pas le deuxième appel de fonction apparent.Si la fonction renvoie "false" (comme 0), vous obtenez le comportement illustré par l'exemple OP.Voici une modification de l'exemple OP qui écrit une seule instruction dans le journal pour chaque pression de touche.
Names Default To Here( 1 );
New Window( "SetKey Example", mb = MouseBox( tb = Text Box( "Press a key." ) ) );
mb << setkey( Function( {this, key},
show( key );
1; // return "boolean" to indicate if the key press was processed.
) );
mb << setkeyenable( 1 );
mb << setfocus;Re : Correction d'un bogue avec les événements de clavier dans MouseBoxMerci @_jr , cela a tout son sens -- tout comme les événements Qt.
Re : Correction d'un bogue avec les événements du clavier dans MouseBox - Statut changé en : Livré