Flex アプリケーションをブラウザーで実行するとき、または AIR アプリとして実行するときに、通常はコピーに使用されるキーボード イベントをキャプチャすることはできないようです。おそらく、ブラウザーまたは OS が最初にインターセプトしているためです。
イベントを通過させるようにブラウザまたは OS に指示する方法はありますか?
たとえば、AdvancedDataGrid では、次の関数を呼び出す keyUp イベントを handleCaseListKeyUp(event) に設定しました。
private function handleCaseListKeyUp(event:KeyboardEvent):void
{
var char:String = String.fromCharCode(event.charCode).toUpperCase();
if (event.ctrlKey && char == "C")
{
trace("Ctrl-C");
copyCasesToClipboard();
return;
}
if (!event.ctrlKey && char == "C")
{
trace("C");
copyCasesToClipboard();
return;
}
// Didn't match event to capture, just drop out.
trace("charCode: " + event.charCode);
trace("char: " + char);
trace("keyCode: " + event.keyCode);
trace("ctrlKey: " + event.ctrlKey);
trace("altKey: " + event.altKey);
trace("shiftKey: " + event.shiftKey);
}
実行すると、コマンド キー (KeyboardEvent.ctrlKey として表示される) を押しながら "C" キーを離すことはできません。次のトレース結果が得られます。
charCode: 0
char:
keyCode: 17
ctrlKey: false
altKey: false
shiftKey: false
ご覧のとおり、キャプチャできる唯一のイベントはコマンド キーのリリースです。コマンド キーを押しながら「C」キーをリリースしても、送信されません。
標準のコピー アンド ペースト キーボード処理の実装に成功した人はいますか?
(コード例に示されているように) "C" キーを単独で使用するか、コピー ボタンを使用できるようにするか?
それとも、リスナーをより高いレベルで手動で作成し、イベントをモジュラー アプリケーションの内部に渡す必要がありますか?