Simuler l'événement keydown
-
28-10-2019 - |
Question
Comment puis-je simuler une touche (ctrl) maintenue enfoncée pendant qu'un autre code est exécuté?Quelle serait l'implémentation de la méthode suivante?
self ctrlDownWhile: [self doSomething]
La solution
Vous pouvez essayer de "tromper" l'état d'entrée, en changeant son état "ctrlDown". La mauvaise nouvelle est qu'il n'a pas de méthode setter pour y accéder (peut-être seulement dans ma version), donc vous devrez peut-être y arriver avec une astuce:
ctrlDownWhile:aBlock
"aBlock will see ctrlDown as true"
|indexOfCtrlState|
indexOfCtrlState := InputState allInstVarNames indexOf:'ctrlState'.
InputState default instVarAt:indexOfCtrlState put:1.
aBlock
ensure: [
InputState default instVarAt:indexOfCtrlState put:0.
].
une alternative est de créer des événements keyPress & keyRelease pour la touche CTRL, et de les mettre en file d'attente dans le WindowSensor, avant et après l'évaluation du bloc.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow