私は、左マウスでテキストを選択し、マウスの左ボタンを押しながら右マウスをクリックすると、アクションを実行しようとしていますbtn
。NSTextViewでマウスの左ボタンを押しながら右マウスを押し下げ、他のマウスを下ろす方法は?
私は現在、rightMouseDown
とotherMouseDown
を無効にしていますが、ユーザーが左マウスを持っている間は呼び出されませんbtn
。どうすれば達成できますか?
私は、左マウスでテキストを選択し、マウスの左ボタンを押しながら右マウスをクリックすると、アクションを実行しようとしていますbtn
。NSTextViewでマウスの左ボタンを押しながら右マウスを押し下げ、他のマウスを下ろす方法は?
私は現在、rightMouseDown
とotherMouseDown
を無効にしていますが、ユーザーが左マウスを持っている間は呼び出されませんbtn
。どうすれば達成できますか?
左マウスを押したままユーザーが右クリックするのはなぜですか?これはほとんどのMacハードウェアでは不可能です。ユーザーがテキストを選択し、マウス左ボタン&を解放してからもう一度右クリックすれば十分でしょうか?
しかし、場合、あなた本当にでこのような機能が必要です。私は同時にダウン&マウスを右、左、それかもしれない仕事を呼び出すためのハードウェアを持っていないとして、私は、これをテストしていません を。
レベルがさらに深くなり、CGEvent
オブジェクトで作業できます。 ここではどのように動作するかを示します。
応答するイベントを定義するビットマスクを作成します。
let eventMask = eventMask | (1 << CGEventType.leftMouseDown.rawValue)
| (1 << CGEventType.leftMouseUp.rawValue)
| (1 << CGEventType.rightMouseDown.rawValue)
| (1 << CGEventType.rightMouseUp.rawValue)
| (1 << CGEventType.otherMouseDown.rawValue)
| (1 << CGEventType.otherMouseUp.rawValue)
self.eventTap = CGEvent.tapCreate(tap: .cghidEventTap, place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: CGEventMask(eventMask), callback: { (proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, userInfo: UnsafeMutablePointer<Void>?) -> Unmanaged<CGEvent>? in
// mySelf is self, if you need to refer to objects in this class
let mySelf = Unmanaged<MyClass>.fromOpaque(userInfo!).takeUnretainedValue()
if type == .leftMouseDown || type == .leftMouseUp {
// Left mouse down etc..
}
return Unmanaged.passUnretained(event)
}, userInfo: UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque()))
最後に、返されたCFMachPort
をrunLoopに追加する必要があります。
let runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runloopSource, CFRunLoopMode.commonModes)
これだけです。試してみてください。
左マウスを押したままユーザーが右クリックするのはなぜですか?これはほとんどのMacハードウェアでは不可能です。ユーザーがテキストを選択し、マウスを左クリックしてからもう一度右クリックしても十分ではないでしょうか? – mangerlahn