我试图弄清楚是否有任何方法可以检测是否shift按下了键,或者在shift按下键时是否发送了任何通知UIKeyboard
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string
Run Code Online (Sandbox Code Playgroud)
不会因为shift按键而被调用,因为它是一个修饰键。
好的,我知道如何从NSEvent确定是否按下了modifierkey:
if ([theEvent modifierFlags] & NSAlternateKeyMask) {
// The Option/Alt key was pressed
}
Run Code Online (Sandbox Code Playgroud)
但是这也同时捕获了optionkey和另一个modifierkey,例如Option + Shift,或者与optionkey的任意组合.
如何仅测试选项键而不测试其他任何内容?
我试图在我的游戏中实现具有两种模式的键盘类.游戏模式接受使用小写未修改键的输入(未修改意义,如果我用移位键入'0',它仍然返回'0'而不是')').我已经跟踪了它,只要使用类的charactersIgnoringModifiers
方法,NSEvent
但是这个方法排除了除shift键之外的所有修饰键.
Qt 通过 QGuiApplication::keyboardModifiers()提供此功能。QML方式是什么?
我在mac os上使用emacs.我想将修饰符(Meta,Control,...)映射到一个简单的键.基本上这就是我需要的东西:(global-set-key (kbd "a") 'hyper)
这里只是一个键,没有Control-a或者其他什么,只是一个单独的whithout修饰符.我希望"a"成为超级例如但我无法找到解决方案.
有人有线索吗?
我会尝试更好地解释我的意思,并且我也会尝试将问题从语言中解脱出来,但是如果有一种方法可以在C#中做我想做的事而不必引用任何东西它会很好.无论如何.
我正在处理键盘输入,并将其转换为字符串.一切都很好.我得到了Shift和CapsLock键的状态并且EXOR它,所以我可以找出结果字符串的大小写.
bool shift = KeyDown(SHIFT_KEY)
bool capslock = KeyToggled(CAPSLOCK)
bool stringCasing = shift ^ capslock //if both are true/false, the string will be lowercase. Otherwise uppercase.
foreach Key k in [list of keys passed as parameter]
char c = (char)k
if stringCasing
c = Char.ToUpper(c)
else
c = Char.ToLower(c)
end foreach
Run Code Online (Sandbox Code Playgroud)
现在没有问题.如果用户在按住shift键或切换大写字母时键入"a",则它变为"A".
但是,如果用户决定键入"!",即"1"加上shift,我只得到1,因为"1"大写仍为"1".
在问这个问题之前我在网上看了一下,但我得到的只是"自己映射键".这真的是唯一的答案吗?而且,如果我映射键然后使用不同键盘布局的用户试图使用我的应用程序会发生什么?提前致谢.
创建一个VCL Forms应用程序并在主窗体的OnMouseDown
事件处理程序中写入:
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Shift = [ssCtrl] then
ShowMessage('CTRL pressed');
end;
Run Code Online (Sandbox Code Playgroud)
然后运行应用程序,按住CTRL键,没有其他修饰键,然后单击表单.没有显示任何消息.为什么现在?
那么Shift
在这种情况下,当只按下CTRL键时,哪个值有效?
modifier-key ×7
cocoa ×2
shift ×2
ascii ×1
c# ×1
char ×1
delphi ×1
emacs ×1
keydown ×1
nsevent ×1
qml ×1
qt ×1
qt5 ×1
uikeyboard ×1
uitextview ×1