Tuşa basıldığında bool False'dan True olarak değiştirilsin mi?

Aug 17 2020

Klavyede bir tuşa bastığımda bir boole değişkeninin değişmesine izin vermek istiyorum.

Mesela yazıyorum

activateE := Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], NotebookEventActions -> {{"KeyDown", "e"} :> activateE}]

ve ardından tuş basışlarını izlemeye çalışın

edown = False;
Dynamic[edown]

Anahtar eartık not defterine herhangi bir metin girişi üretmeyi durdururken , ne kadar sıklıkla basarsam da ne yazık ki Dynamicher zaman görünmeye devam ediyor . Neyi yanlış yapıyorum veya bunu doğru şekilde nasıl yapacağım?Falsee

DÜZENLE:

Alternatif olarak, CurrentValueişlevi deniyorum . Örneğin,

Dynamic[CurrentValue["ModifierKeys"]]

örneğin Ctrltuşa basıldığında düzgün gösterir . Ama denersem

Dynamic[CurrentValue["EventKey"]]

çıktı Nonehangi tuşa bastığım önemli değil. CurrentValueHarf gibi normal bir tuşa basmayı kaydedecek bir seçenek var mı e?

DÜZENLEME2:

İşe yarayan şey

EventHandler[InputField[], {"KeyDown", "e"} :> activateE]

ancak sadece InputField'ı odak noktasına getirmek için ilk tıklarsam.

Yanıtlar

4 kglr Aug 17 2020 at 00:22

Bu seçenekle NotebookEventActionsbirlikte kullanılması, PassEventsUp -> TrueSürüm 11.3'te (Windows 10 - 64 bit) istenen davranışı verir:

ClearAll[activateE]
activateE:=  Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], 
 NotebookEventActions -> {{"KeyDown", "e"} :> activateE, PassEventsUp -> True}]

Bir varyasyon: Geçiş arasında Falseve Trueanahtar zaman ebasılır:

$Version

"Microsoft Windows (64-bit) için 11.3.0 (7 Mart 2018)"