Macromedia Director非公式テクニカルノート
exitLockをTRUEに設定するとMac OS Xで[command]+Qが検知できない
ID: FN0411001 |
Product: Director |
Platform: Mac OS X
Viersion: 10.0 and 10.1
1. 現象
Director MXではexitLockムービープロパティをTRUEに設定しても、Mac OS Xではアプリケーションメニューがショートカットキーとして[command]+Qを先取りしてしまい、プロジェクタの終了を防ぐことができませんでした。MX 2004はこの点が改善され、exitLockをTRUEに設定すると、[command]+Qでプロジェクタが終了しないようになりました。
図001■プロジェクタのアプリケーションメニュー
[command]+Qが終了のショートカットキーに割当て
ところが、[command]+Qの操作をスクリプトで処理しようとしても、on keyDownやon keyUpハンドラで検知することができません。以下のムービースクリプトを設定しても、[command]+qでプロジェクタは終了しません。[command]+.であればon keyDownハンドラが呼出され、_movie.halt()のステートメントも実行されます。
スクリプト001■on keyDownハンドラで[command]+Qを検知
-- ムービースクリプト
-- [command]+.または[command]+Qでのみプロジェクタを終了させたい
on startMovie
_movie.exitLock = true
end
on keyDown
if (_key.commandDown) then
sKey = _key.key
if (sKey = "." or sKey = "q") then
_movie.halt()
end if
end if
end
|
2. 原因
Director MX 2004を使用してexitLockプロパティをTRUEに設定した場合、[command]+Qのキー操作はMac OS Xのアプリケーションメニューに奪われてしまい、on keyDownやon keyUpハンドラには渡りません。したがって、これらのハンドラの中で[command]+Qの操作を処理することはできません。
3. 対処法
on closeRequestイベントハンドラを使用すれば、[command]+Qの操作を受取ることができます。ただし、on closeRequestハンドラは、ユーザーが他のプロジェクタ終了操作を行った場合にも呼出されます。ユーザーが[command]+Qの操作を行ったかどうかは、別途スクリプトでキー操作を調べる必要があります。
[command]キーが押されているかどうかは、commandDownキープロパティで調べることができます。しかし、Qキーについては、最後に押されたキーを返すkeyプロパティでは取得できません[*1]。アプリケーションメニューによって、キー操作が奪われてしまうようです。
[*1] したがって、オンラインヘルプでexitLockムービープロパティの項に「例」として記載されている関数は、on closeRequestハンドラから呼出したとしても、Mac OS Xで[command]+Qのキー操作を検知することはできません。
スクリプト002■オンラインヘルプexitLockの項に掲載されている「例」
-- Lingo シンタックス
on checkExit
if ((_key.commandDown) and (_key.key = "." or _key.key = "q") and \ (_movie.exitLock = TRUE)) then _movie.go("終了シーケンス")
end checkExit
|
|
Qキーが押されていたかどうかは、keyPressed()キーメソッドで調べることが可能です。したがって、[command]+.または[command]+Qのみでプロジェクタを終了させるムービースクリプトは、つぎのようにして作成することができます。
スクリプト003■on closeRequestハンドラで[command]+Qを検知
-- Lingoシンタックス
-- ムービースクリプト
-- [command]+.または[command]+Qでのみプロジェクタを終了させる
on startMovie
_movie.exitLock = true
end
on closeRequest
if (_key.commandDown) then
if (_key.keyPressed(".") or _key.keyPressed("q")) then
_movie.halt()
end if
end if
end
|
// JavaScriptシンタックス
// ムービースクリプト
// [command]+.または[command]+Qでのみプロジェクタを終了させる
function startMovie() {
_movie.exitLock = true;
}
function closeRequest() {
if (_key.commandDown) {
if (_key.keyPressed(".") || _key.keyPressed("q")) {
_movie.halt();
}
}
}
|
_____
作成者: 野中文雄
作成日: 2004年11月1日
Copyright ©
2001-2006 Fumio Nonaka. All rights reserved.
|