• ベストアンサー

背面のコンポーネントが操作できてしまう

ActionScript2で画面を作っております。 ボタンなどのコンポーネントが並んだメインの画面の上に ダイアログボックスを表示させたいと思い、 getNextHighestDepth()で取得した深度に empty movieclipを作って、 そこにダイアログボックスのビットマップをattachして 表示させました。 表示はうまくできたのですが、ダイアログボックスの上から 背面にあるボタンなどが操作できてしまいます。 ダイアログボックス表示中は背面のコンポーネントは 操作できなくしたいのですが、どうすればよいでしょうか? 背面のコンポーネントにenabled=falseを設定するのも 考えましたが、数が多いのでいちいち設定するのが大変です。 デザイン上visible=falseにすることもできません。 最前面のビットマップ(orそれがattachされているmovieclip)に だけマウスイベントが来るようにできればよいのですが。

  • Flash
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

肝心な Flash のバージョンを書かれていらっしゃいませんが...。 どっちみちコンポーネントを使用されるのでしたら Alertコンポーネントを使えば解決すると思いますが(ただし確か Flash 8 以上)。 Alertコンポーネントを一旦ステージ上に配置して,すぐに削除し, --------------------------------- import mx.controls.Alert; Alert.show("メッセージ", "タイトル"); --------------------------------- このようなスクリプトを書くだけで Alertコンポーネントのみが出没して他のボタン機能などがすべて無効になります。 ===別法============================================== 別法というか#1の方の路線と同じです。 > getNextHighestDepth()で取得した深度に > empty movieclipを作って、 > そこにダイアログボックスのビットマップをattachして > 表示させました。 この具体的な状況が全くわかりませんが, その 「ダイアログボックスのビットマップ」 の1つ下の深度に ステージ全体の透明な塗り入りムービークリップを用意して, その透明ムービークリップに 擬似onRelease を定義して さらにハンドカーソルを無効にすれば良いのではないでしょうか? これは ActionScriptなど関係なしでFlash作成上でよく使われる手段です。 その手段をスクリプト化したものです。 コピペするだけでできるサンプル↓。 ------------------------------------------------ // DepthManagerをimport import mx.managers.DepthManager; // 空のムービークリップ [btn_mc] を _root の最高深度に作成 var btn_mc:MovieClip = _root.createEmptyMovieClip("btn_mc", _root.getNextHighestDepth()); // DepthManagerで改めて使用可能な最上位の深度に再設定 btn_mc.setDepthTo(DepthManager.kTop); // [btn_mc] にステージ全体に広がる透明な塗りを作成 // (ここでは見えるように黒の半透明にしておきます) btn_mc.beginFill(0x000000, 20); btn_mc.moveTo(0, 0); btn_mc.lineTo(Stage.width, 0); btn_mc.lineTo(Stage.width, Stage.height); btn_mc.lineTo(0, Stage.height); btn_mc.lineTo(0, 0); // [btn_mc] にダミーの onRelease を設定 btn_mc.onRelease = function():Void { }; // [btn_mc] のハンドカーソルを無効にする btn_mc.useHandCursor = false; // --- 以下は適当 --- // テキストフィールド [btn_txt] を [btn_mc] の上の深度に作成 var btn_txt:TextField = _root.createTextField("btn_txt", btn_mc.getDepth()+1, 150, 100, 0, 0); // [btn_txt] の書式などを設定 btn_txt.border = true; btn_txt.background = true; btn_txt.autoSize = true; btn_txt.text = "★ココをクリック★"; // [btn_txt] をクリック(プレス)したときの動作を定義 btn_txt.onSetFocus = function():Void { // テキストフィールドとムービークリップの後片付け btn_txt.removeTextField(); btn_mc.removeMovieClip(); }; ------------------------------------------------ ※ Flash MX 2004 をお使いの場合は   または Flash Player7 用SWFをパブリッシュする場合は, // テキストフィールド [btn_txt] を [btn_mc] の上の深度に作成 var btn_txt:TextField = _root.createTextField("btn_txt", btn_mc.getDepth()+1, 150, 100, 0, 0);   ↓変更↓ // テキストフィールド [btn_txt] を [btn_mc] の上の深度に作成 _root.createTextField("btn_txt", btn_mc.getDepth()+1, 150, 100, 0, 0); 「F-site 意外と使えないMovieClip.getNextHighestDepth()」 http://f-site.org/articles/2004/12/12021122.html 「F-site 深度の管理 DepthManager」 http://f-site.org/articles/2006/06/02202128.html

ayudaia
質問者

補足

デザイナーの作った画面を使うのが前提なので 別法で試してみました。 setDepthTo()を使うとなぜか表示されませんでしたが、 おおむねサンプルの通りで動作しました。 ありがとうございました。

その他の回答 (1)

  • cspl
  • ベストアンサー率83% (55/66)
回答No.1

方法はいくつか考えられますが、簡単な方法の一つとして、最前面のオブジェクトのすぐ下の階層にステージ全体を被う透明なムービークリップを敷いて、onReleaseなどのマウスに反応する関数を仮に定義しておけば背面にあるオブジェクトはマウスに反応しません。 マウスカーソルが指になるのを避けるため、useHandCursorを切ります。 ________ //ステージを被う透明のムービークリップbgMaskを最前面のオブジェクトの下に配置する。 bgMask.onRelease = function(){}; bgMask.useHandCursor = false; ________

関連するQ&A

  • オブジェクトのプロパティーをVBAで操作する方法

    今、Excel97とVBAを用いて、ツールを作成しています。 VBAでシートに貼り付けたボタンをEnabled=TrueにしているのをEnabled=Falseにしたいと思い、ヘルプを元に作成しました。しかし、「変数が定義されていません。」と表示されてしまいます。 Sheet オブジェクト名:CommandButton1 VBA sub 表示操作() CommandButton1.Enabled = True ← エラー箇所 end sub オブジェクトのプロパティーをVBAから操作する方法を教えて下さい。

  • FAX コンポーネントのインストールが出来ません。

    コントロール パネルの プログラムの追加と削除を開き、[Windows コンポーネントの追加と削除] をクリックし、[Windows コンポーネント ウィザード] で [FAX サービス] チェック ボックスをオンにして、画面に表示される指示に従って操作してますが、 不思議なことにXPのCDを求められないままインストールが終了し、FAX コンポーネントをインストールが出来ません。 エラーメッセージはありません。 インストール後、[スタート] ボタンをクリックし、[プログラム]、[アクセサリ]、[通信] の順にポイントしても、[FAX コンソール] が表示されません 。 ユーザ名がひらがなだったので、半角英字にしましたが駄目です。 WindowsXPをアップグレードモードで再インストールし、FAX コンポーネントのインストールを試みましたが駄目です。やはりCDを求められません。 助けててください。

  • AutoCAD塗りつぶしが背面にならない

    AutoCAD 2005LT です。 CADのオブジェクトの塗りつぶしをしたいのですが、塗りつぶしまではOKなのですが、どうしても背面に行ってくれません。 ポリラインを選択し、ハッチングのダイアログボックスでSOLID、見本を「RED]で表示順序を「最背面へ移動」 を選択し、オブジェクトの選択で閉じます。 ポリラインを選択し、右クリックでプレビューをクリックするのですが、塗りつぶしの領域は真っ赤で、下の線は見えません。  他の設定があるのでしょうか。 ハッチングを選択して、ツールから表示順序を最背面にしても、後ろに行ってくれません。 よろしくお願い致します。

  • Vistaで[Windows コンポーネントの追加と削除] をするには?

    いつも勉強させていただいております。今回は質問をさせていただけないでしょうか。 Vistaを使って、下記の操作を行いたいと思います。 1.[プログラムの追加と削除] を選びます。 2.[プログラムの追加と削除] ダイアログ ボックスで、[Windows コンポーネントの追加と削除] を選びます。 3.Windows コンポーネント ウィザードで、[インターネット インフォメーション サービス (IIS)] を選択します。 WinXPでは、問題なくできましたが、Vistaでは[Windows コンポーネントの追加と削除]がありません。 どのようにすれば、できますでしょうか? それでは、よろしくお願いします。

  • 切り取り、コピー、貼り付け等の操作が出来ない

    今日、ついさっきまでは出来ていたのですが、切り取り、コピー、貼り付け等の操作をすると ダイアログボックス(っていうのでしょうか?)がでて、『クリップボードが開くことができません』と表示されてしまいます。 ワードや掲示板まで、いろんなところで試してみたのですが、どれも出来ません。 (ダイアログボックス?がでないところもありましたが・・・) 文書作成等の時、この操作が出来ないため、ものすごく困っています。解決法お待ちしております。

  • どれか1つでもチェックされていたら無効にする

    VB2010 7 Pro SP1 8つのチェックボックスと4つのラジオボタンがあり、チェックボックスにどれか1つでも チェックが入っていたらラジオボタンを無効にし、チェックが全部外れたら ラジオボタンを有効にしたいです。 下記のようなifで出来るかと思ったのですが、フォーム、ラジオボタン、チェックボックス どれに記述しても動きません。 どこに記述すればいいでしょうか? If CheckBox1.Checked Or CheckBox2.Checked Or CheckBox3.Checked Or CheckBox4.Checked Or CheckBox5.Checked Or CheckBox6.Checked Or CheckBox7.Checked Or CheckBox8.Checked Then RadioButton4.Enabled = False RadioButton6.Enabled = False RadioButton7.Enabled = False RadioButton8.Enabled = False Else RadioButton4.Enabled = True RadioButton6.Enabled = True RadioButton7.Enabled = True RadioButton8.Enabled = True End If

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • 透明なフレーム VB.net

    開発環境 Windows2000Pro VB.net 2003 コンボボックス・オプションボタン(ラジオボタン)・チェックボックスの操作を不可としたいと思っております。 単に「Enabled」プロパティを「False」にすると、ラベルの文字が薄くなってしまうので、文字はそのままにしたいと考えております。 VB6では、枠線無しのフレームで囲み、そのフレームに対して、「Enabled」を操作することで可能でした。 VB.netではGroupBox・Panelというコントロールが提供されているようですが、実現は可能なのでしょうか? ご存知な方、宜しくご教授お願いします。

  • コンポーネントが見つかりません

    PCを立ち上げようとすると、以下のメッセージが表示されてしまいます。 <lsass.exe-コンポーネントが見つかりません> NTDSAPI dllが見つからなかったため、このアプリケションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。 この表示の次にOKボタンを押しても画面は真っ暗のままで、この先へ進むことが出来ません。 正常に立上げられるように修復する方法をご教示頂ければ助かります。 OS:XP    PC:DELL DIMENSION 4600C です。

  • panelコンポーネントの動作について

    Visula Stuio 2005でC#を使ってアプリケーションを作っています。 設定画面のようなダイアログを作るのに画面上の項目をpanelコンポーネントでグループ分け表示をしようと考えました。ところがこのpanelのプロパティのanchorやdockを設定していないにもかかわらず一度閉じて再度デザイナーで開くとパネルの位置やサイズが変わってしまいます。この場合のずれ具合はanchorやdockを想定しても不可解です。 編集中にもウィンドウサイズを変えるとあたかも上下左右にAnchorが設定されているかのようなリサイズが発生しています。 試しにグループボックスに変えたらこの現象は起きなくなりました。ただ、表示デザイン上はできればpanelを使用したいと思っています。 このパネルの動作はどう見てもおかしいのですが、この問題の回避方法について教えていただきたいのですが。

専門家に質問してみよう