2009-11-09 36 views
1

我正試圖檢測flex中alt鍵的關鍵事件。我有一個KeyboardEvent.KEY_DOWN和KeyboardEvent.KEY_UP的標準事件偵聽器,但沒有得到alt鍵(或ctrl鍵)的任何響應。在Flex中檢測alt keyDown鍵盤事件

我知道,如果Alt鍵是通過鼠標事件按下我可以檢測,但我想,當alt鍵被按下,以顯示它會執行從時不是按了不同的動作來更新光標。

我使用Safari在Mac上發展,所以讓我知道如果也許這是一個孤立的問題。

回答

0

至於STEF指出,這似乎是在Safari中的錯誤。

這可以通過使用JavaScript來傳遞事件到閃存予以糾正,雖然我不知道的JavaScript會得到他們,如果Flash影片具有焦點。

這裏是如何做到這一點的例子: javascript to actionscript keypress passing utility?

0

我沒有在我面前一個Flex環境,但我不認爲修改鍵(Shift鍵,控制和選擇你的情況)信號鍵盤事件。如果我是對的,您仍然可以通過測試每個MouseEvent上的控件和Alt鍵的狀態並根據需要更新遊標狀態來獲取所需的大部分內容。

它可能還在不斷地採樣在後臺選項鍵的狀態,但我不記得如何獲取鍵盤狀態,而不接口事件來工作。祝你好運。

+0

感謝戴夫,我想到了一個恆定的OnMouseMove事件,但它是一個有點髒。事情是我需要向用戶顯示按下alt將執行不同於沒有它的操作。當他們按下鼠標時,已經太晚了。 我可以從輪班獲得事件,所以可能不得不使用它。不理想:( – robmcm 2009-11-09 15:05:25

0

試試這個:

component.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, true); 
component.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler, true); 

protected function keyDownHandler(event:KeyboardEvent):void 
{ 
    states[ event.keyCode >>> 3 ] |= 1 << (event.keyCode & 7); 
} 

protected function keyUpHandler(event:KeyboardEvent):void 
{ 
    states[ event.keyCode >>> 3 ] &= ~(1 << (event.keyCode & 7)); 
} 

,您可以檢查是否有鍵被按下,這樣的:

public function isKeyDown(keyCode:uint):Boolean 
{ 
    return (states[ keyCode >>> 3 ] & (1 << (keyCode & 7))) != 0; 
} 
+0

感謝ghalex,但問題是,Safari不按下ALT鍵按下得到一個事件 有趣的,看看你的位運算符的使用,看瘋了。) – robmcm 2009-11-11 11:09:06