Christopher Huylerも同様のものを投稿しました(ソース コードはこちらから入手できます)。記事から:
まず、 Google のコード リポジトリから Javascript コードを取得します。
ステップ 1 – カスタム コンテキスト メニュー コードのセットアップ
Flex Builder で新しい Flex プロジェクトを作成します。rightclick.js と swfobject.js をプロジェクトの html-template フォルダーにコピーします。ここから、いくつかの変更を加える必要がありました…</p>
- オブジェクトとコンテナーの値を入力として受け入れるように、RightClick.init() 関数を変更しました。これにより、毎回同じものを呼び出す代わりに、アプリケーションの名前をオブジェクトとして渡すことができます。
- index.template.html のヘッダーに rightclick.js と swfobject.js を含めました。
- 「flashcontent」というボディに新しい div を追加しました。
- body タグに onload ハンドラを追加して、RightClick を初期化しました
- AC_FL_RunContent(…) を新しい SWFObject(…) に置き換えて、すべてのテンプレート変数を確実に維持します。
これらの変更を行った後、アプリケーションに右クリック コンテキスト メニューが表示されないことを確認しました。
ステップ 2 – rightClick イベントをリッスンする
次に、アプリケーションのメイン mxml ファイルに数行を追加して、アプリケーションを右クリックしたときにディスパッチされる ExternalInterface イベントをリッスンします。
private function handleCreationComplete():void
{
ExternalInterface.addCallback("rightClick", handleRightClick);
}
private function handleRightClick():void
{
Alert.show("Right Click Success!");
}
ステップ 3 – イベントを正しいオブジェクトにディスパッチする
イベントをメイン アプリケーションに渡すのは簡単ですが、実際には、右クリック イベントが発生したときに適切な子オブジェクトに通知する必要があります。アプリケーションでダブルクリック イベントを使用していないので、すべての右クリック イベントをダブルクリック イベントのように扱うことにしました。2 ボタン マウスを使用していないユーザー (別名 Mac ユーザー) はダブルクリックするだけで同じメニューを表示できますが、2 ボタン マウスを使用しているユーザーは右クリックするだけで済みます。イベントが適切なオブジェクトにディスパッチされるようにする方法を次に示します。
private function handleRightClick():void
{
var objects:Array = systemManager.getObjectsUnderPoint(
new Point(mouseX,mouseY));
if (objects.length>0)
{
var object:Object = objects[objects.length-1];
var relatedObject:InteractiveObject;
if (object is InteractiveObject)
relatedObject = object as InteractiveObject;
else if (object.parent && object.parent is InteractiveObject)
relatedObject = object.parent;
var event:MouseEvent = new MouseEvent(
MouseEvent.DOUBLE_CLICK,true,false,mouseX,mouseY,
relatedObject);
object.dispatchEvent(event);
}
}
これが役立つことを願っています!