サイトトップ

Director Flash 書籍 業務内容 プロフィール
 

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はこの点が改善され、exitLockTRUEに設定すると、[command]+Qでプロジェクタが終了しないようになりました。

図001■プロジェクタのアプリケーションメニュー

[command]+Qが終了のショートカットキーに割当て

ところが、[command]+Qの操作をスクリプトで処理しようとしても、on keyDownon 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 keyDownon 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.