Fehler im Zusammenhang mit Tastaturereignissen in MouseBox behobenBetrachten Sie den folgenden Code:
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;Durch Drücken einer Taste, z K bewirkt, dass die angehängte Funktion zweimal ausgeführt wird.Natürlich kann man mit Timing und dergleichen einen Workaround schaffen, aber ich denke, dass selbst die JMP-Entwickler solche benutzerbasierten Workarounds für unglücklich halten würden.
Was hat diese Wunschlistenanfrage inspiriert?
(Ihre Vorlage hat meine Antwort auf diese Frage gelöscht)
Welche Verbesserung würden Sie sich wünschen?
(Ihre Vorlage hat meine Antwort auf diese Frage gelöscht)
Warum ist diese Idee wichtig?
(Ihre Vorlage hat meine Antwort auf diese Frage gelöscht)
Automatisierung und SkripterstellungBetreff: Fehler bei Tastaturereignissen in MouseBox behoben – Status geändert in: GeliefertBetreff: Fehler bei Tastaturereignissen in MouseBox behobenDanke @Jasean , das macht absolut Sinn – genau wie Qt-Ereignisse.
Betreff: Fehler bei Tastaturereignissen in MouseBox behobenLeider ist die Mouse Box-Dokumentation nicht ganz vollständig.Wir sind uns dessen bewusst und es steht auf der Liste, die korrigiert werden muss.Bitte beachten Sie in der Zwischenzeit, dass die Nachricht „<< Set Key“ darauf ausgelegt ist, auf einen „booleschen“ Rückgabewert der eingeschlossenen Funktion zu reagieren.Wenn die Funktion „true“ (z. B. 1) zurückgibt, zeigt sie Set Key an, dass der Tastendruck verarbeitet wurde, und Sie erhalten nicht den scheinbaren zweiten Funktionsaufruf.Wenn die Funktion „false“ (wie 0) zurückgibt, erhalten Sie das im OP-Beispiel dargestellte Verhalten.Hier ist eine Modifikation des OP-Beispiels, die für jeden Tastendruck eine einzelne Anweisung in das Protokoll schreibt.
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;Betreff: Fehler bei Tastaturereignissen in MouseBox behoben – Status geändert in: BestätigtHallo @ErraticAttack , und alle, die kommentiert haben. Das hört sich nach einem Bug an. Wir teilen es mit unserem technischen Support.
Betreff: Fehler bei Tastaturereignissen in MouseBox behobenIch habe mich gefragt, wie viel Zeit zwischen den beiden Auslösern des Befehls vergeht – und habe dabei eine einfache Lösung gefunden:
Machen Sie den Befehl einfach leicht länger als show(key) - und es wird nur 1x ausgelöst 
Die erste Funktion wird zweimal ausgelöst:

Das Auskommentieren der zweiten (etwas längeren) Funktion löst das Problem:

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;
Betreff: Fehler bei Tastaturereignissen in MouseBox behobenIch habe mich gefragt, ob es daran liegt, dass ich die Taste gedrückt und wieder losgelassen habe.
Wenn Sie jedoch die Tasten gedrückt halten, wird die Funktion immer wieder ausgelöst.
Besonders interessant ist das Ergebnis, wenn man die Eingabetaste drückt. Dann ist es:

Betreff: Fehler bei Tastaturereignissen in MouseBox behobenWow, was für eine coole Funktionalität: setkey !
Danke für die Erwähnung...
Trotzdem wirklich seltsames Problem!
Überraschenderweise wird die Funktion nicht immer zweimal ausgelöst (siehe a,b,r,t,z) und für Return (und Enter) erhält man zusätzlich ein End“:
Jmp17 mit deutscher Tastatur:
