• ベストアンサー

Flash5でリンクボタンにtabIndexを指定したい

ブラウザでswfファイルを表示させたときに、 Tabキーでムービー内のリンクボタンを順番にフォーカス移動させたいのですが、順番がバラバラ・飛び飛びになってしまいます。 FlashMXからはtabIndexを簡単に指定できるそうなのですが、私はFlash5しか持っておらず、またActionScriptについても恥ずかしながらよく解っておりません。 こうすればうまく設定できる、と教えてくださる方がおられましたら、よろしくお願いいたします。 (Flash5J、WindowsXP)

  • aoneko
  • お礼率90% (100/111)
  • Flash
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

テキストフィールドなら、Flash 5 でも ActionScript でフォーカスを制御できそうです(フォーカスを制御する Selection というオブジェクトがあります)が、残念ながら、ボタンのフォーカスを制御するスクリプトは見当たりませんでした。 Macromedia 社のHPで公開されている Flash のテクニカルノートに、Tab インデックス決定の法則に関する記述がありましたので、よろしかったらご参照ください。 この式から察するに、ボタンが縦並びの場合は上から順に、横並びの場合は左から順に Tab インデックスが決定されると思われます。 しかしこの式は、ボタンが縦並びの時はいいのですが、横並びになっている場合には少々問題があるようです。 例えば、大きさの違うボタンが    ○       △     □  ◎ このようにバラバラに並んでいても、上から順に○→△→□→◎の順にフォーカスが合います。ボタンの大きさが極端に違っていたり、X座標に大きな差がある場合でも、縦並び、もしくはそれに近い並び方であれば、たいていは上から順に Tab インデックスが決まります。 ところが、  ○ 。 ° ・ このように、ボタンの左上のY座標に大きなズレがあって横並びになっている場合は、○ → ° → ・ → 。 のように、X座標の大小よりもY座標の小さいもの(ステージの上の方にあるもの)が優先される場合があります。 テクニカルノートによれば、Tab インデックスの順番の決定にはボタンの左上の座標が使われるとのことですので、横並びの場合は特に、左上の座標に注意する必要がありそうです。 ボタンの大きさに違いがあり、ボタンの中央や下端を基準にして横一直線に並べている場合などは、見た目は一直線に見えますが、左上のY座標に注目すると大きなバラつきができていて、これが Tab インデックスの順番に影響を与えると思われます。 (縦並びでのX座標のズレはあまり問題にはならないのに、横並びのY座標のズレだと問題があるのは、計算式で、X座標に乗算される定数は 1/3 ですが、Y座標に乗算されるのは2と大きいことが関係しているのではないかと思います) 横並びの配置では、全てのボタンの上端を水平にして配置すると、左上のY座標は同じになります。この状態では単純にX座標の大小で順番が決まりますから、左から順にフォーカスが合うようになります。 Tab キーで飛び飛びに選択されるのがどうしても見苦しいようでしたら、最終手段で、Tab キーが押された場合に表示される黄色い四角形を表示しないようにする、つまり、Tab によるボタンの選択を禁止してしまう方法もあります。

参考URL:
http://www.macromedia.com/jp/support/flash/ts/documents/fl0261.html
aoneko
質問者

お礼

大変解りやすくご説明をいただき、疑問が一度に晴れた思いです。ありがとうございました。 本当にその法則のとおりにフォーカスが移動いたします。 まさに参考URLで示していただいたMicromediaページのメニュボタンのようなものを作ろうとしておりました。 黄色いォーカスを表示させないことはできましたが、私自身、ブラウザで操作する際主にキーボードを使用するので、Tabキーはぜひ活用させたいのですが、バージョン5ではボタンのTab順を指定することはできないのですね。 根本的にデザイン・レイアウトから考え直すことにいたします。 そうだ、MXを購入するという手もある!と思い、体験版をDLしてみました。 しかしこれはActionScriptをきちんと勉強しなければ非常にもったいない・・・。 ASを勉強するならまずはバージョン5を使いこなすことから始めなければ。

その他の回答 (1)

noname#10877
noname#10877
回答No.1

直接の回答ではないですが・・・。 とりあえず現状で、順番がバラバラ・飛び飛びながらもフォーカス移動ができているのですよね? であれば、その順番には何かしらの法則があるはずです。その法則がわかれば、求めたい順番に並べ直すことも可能なのでは?と思ったのですが。 全くの憶測ですが、私が思ったことは、それぞれのボタンが置かれているレイヤーの順番や、同じレイヤー上に置かれているボタンでも重なり順があるので、それらを希望のフォーカス順と同じように並べ変えるともしかすると・・・というものです。 ActionScriptでスマートに解決できればいいですが、 こういう考え方もあるかなと思いましたので。 参考まで。

aoneko
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 なるほど、法則があったのですね。 横並びのメニューボタンをクリックすると、その下に横並びのサブメニューが開くものにしていたのですが、このレイアウトでは無理のようです。残念。 抜本的にデザインを変える必要がありますね。 大変参考になりました。 アドバイスありがとうございます。

関連するQ&A

  • ラジオボタンのtabindex = -1について

    画面に配置されたラジオボタンにおいて マウス以外からの操作を無効にしたいと考えています。 (タブでの移動を不可としたい。) そこで、ラジオボタン部分にtabindex=-1を付加しましたが、 うまくいきません。 (順番は変更できるようですが。) 最終的にtabでのフォーカスがあたってしまいます。 これは、もうjavascriptで強制的に制御するしかないのでしょうか?

  • Flashのムービー上のボタンからブラウザを閉じさせる

    こんにちは FlashのActionScriptは初心者です。 いつも勉強させていただいております。 Flashのムービー上のボタンの クリックイベントから ムービーがのっている、 ブラウザのウインドウを閉じさせる ことはできるのでしょうか? よろしくおねがいたします。 *********************** FlashMX IE5.5以上

  • Flashの再生が始まらない

    FlashでコーディングしたプログラムをHTMLに貼り付けると、たまに再生が始まらないことがあります。概要としては、簡単に説明するとクエリを含んだアドレス(例:●●.swf?msg=あああ)から値を受け取り、それをムービークリップ上に表示するというものです。仮にクエリから値を取得できなくても、そういった場合に備えて他の文字で代用するコーディングもしてあります。実際、書き出したswf本体を再生すると当然クエリの値は受け取れませんが、代用コードが働いて代わりの文字が表示されます。 問題は、なぜかHTMLに貼り付けた場合とブラウザを通じてswfに直接アクセスしたとき、再生がはじまらない不具合が発生するということです。これはなぜなのでしょうか?もしかしてブラウザを介することに問題があるのでしょうか? 製作環境は WindowsXP Flash8 swfはそれぞれFlash8、ActionScript2.0の設定で書き出しています。

  • VisualC#.net TabIndexの設定

    Microsoft Visual C# .NET 2003で、Windowsアプリケーションを作っています。 フォーム上に、テキストボックスですとかプッシュボタンですとか、コントロールがいくつかあります。 実行時にTabキーを押したときの順番(Tabオーダー)は、プロパティの"TabIndex"で決まっていると思うんですが、 あとでコントロールを追加したときなどTabIndexをずらしたり付け替えたりするにはどうすればよいのでしょうか。 1つ1つ付け替えるしかないのでしょうか。

  • TabIndexを使わないで、フォーカスの移動

    ご多忙中大変申し訳ありません。 VBの初心者です。 TabIndexを使わないで、コントロールの名前の番号でフォーカスの移動をしたいのですが、私のレベルでは全くできません。 TextBox1、TextBox2、TextBox3、TextBox3、~TextBox15 のようにTextBoxの後ろに付いている、数字を利用してフォーカスの移動をしたいと思っております。 実装前に下記のようなコードを書いてテストしていますが、どこを調べても、また試行錯誤を繰り返してもできません。 Public Class Form1 'テスト Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Me.KeyPreview = True '1列目TextBoxの生成 Dim i As Integer For i = 0 To 4 Dim txtbx As New TextBox txtbx.Size = New Size(105, 30) txtbx.Location = New Point(50, 50 + i * 40) txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular) txtbx.TabIndex = i * 3 txtbx.Text = "TabIndexは" & CStr(i * 3) txtbx.Name = "TextBox" & CStr(i + 1) Me.Controls.Add(txtbx) Next '2列目TextBoxの生成 For i = 0 To 4 Dim txtbx As New TextBox txtbx.Size = New Size(105, 30) txtbx.Location = New Point(160, 50 + i * 40) txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular) txtbx.TabIndex = i * 3 + 1 txtbx.Text = "TabIndexは" & CStr(i * 3 + 1) txtbx.Name = "TextBox" & CStr(i + 6) Me.Controls.Add(txtbx) Next '3列目TextBoxの生成 For i = 0 To 4 Dim txtbx As New TextBox txtbx.Size = New Size(105, 30) txtbx.Location = New Point(270, 50 + i * 40) txtbx.Font = New Font("MSゴシック", 12, FontStyle.Regular) txtbx.TabIndex = i * 3 + 2 txtbx.Text = "TabIndexは" & CStr(i * 3 + 2) txtbx.Name = "TextBox" & CStr(i + 11) Me.Controls.Add(txtbx) Next End Sub Private Sub Form1_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If e.KeyCode = Keys.Right Then '→キーによるフォーカスの移動 Me.SelectNextControl(ActiveControl, True, True, True, False) e.Handled = True ElseIf e.KeyCode = Keys.Left Then '←キーによるフォーカスの移動 Me.SelectNextControl(ActiveControl, False, True, True, False) e.Handled = True End If '↓(Down)キーによるフォーカスの移動  ここができません。 If e.KeyCode = Keys.Down Then Dim txtboxname As String txtboxname = Me.ActiveControl.Name 'TextBoxの名前の名前の取得 Dim txtbxnum As String txtbxnum = txtboxname.Remove(0, 7) 'TextBox~の名前から、~(数字)だけにする。 Dim controlName As String controlName = "TextBox" & CStr((CInt(txtbxnum) + 1)) 'TextBox~の名前の~に1を足す。 Me.Controls(controlName).Select() 'TextBox~+1のTextBoxをフォーカス 'Select() Focus()も結果は同じです。 End If '↑(Down)キーによるフォーカスの移動 'この部分は、↓(Down)キーによるフォーカスの移動が出来るようになりましたら、追加します End Sub ' Enterキーによるフォーカスの移動 Private Sub Form1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(ActiveControl, True, True, True, True) e.Handled = True End If End Sub End Class 最終的な目的の動作は、EnterキーではTabIndexの順番にフォーカスの移動。 ←キーでは、左にフォーカスの移動。 →キーでは、右にフォーカスの移動。 ↑キーでは、上にフォーカスの移動。 ↓キーでは、下にフォーカスの移動。 コントロールの名前の番号でフォーカスの移動をしたい理由は、 Enterキーと←、→キーによるフォーカスの移動でTabIndexの順番を使い、上下方向、↑キー、↓キー移動には、TabIndexの順番が画像のように少々複雑になってしまい、TabIndexを使用してのフォーカスの移動は断念しました。 もし、TabIndexでフォーカスの移動が出来るようなら、そちらのほうでもかまいません。 使用バージョンは、VB2010 Express Edition です。 ご迷惑を、おかけしますが、どうかご助力をお願いいたします。

  • flashの基本的なことが理解出来ません。

    windowsXPで、FlashMXを始めたばかりの初心者です。 ActionScriptを始めようと、何冊かの参考書を読み始めましたが、 一番最初に書かれている、フレーム、ムービークリップ、ボタンアクションの、 特に、フレームとムービークリップのアクションの違いがよく解りません。 どういう時に、フレームアクションを書くのか・・・良く理解出来ません。 何かに例えて、教えていただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • ActionScriptでボタンをクリックしたときの動作をまとめて指定したい

    FlashMX2004で、メニューを作成しています。 ボタンの数が多いことから、いちいち一個ずつのボタンにクリックしたときの動作(getURL)を指定するのが大変なので、一番最初のフレームにActionScriptで指定したいのです。 確か、以前そういうのをやった記憶があるのですが、 とても急いでいるので調べる時間がありません。 複数のボタンが、一番上の階層にあるもの(メインメニュー)と、ムービークリップ内に配置したサブメニューと様々あります。 それぞれの指定の仕方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • flashのリンクの貼り方おしえて!

    以下のようにやってもMACではリンクするのですがWINでリンクしないのです。 <A HREF="url"><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=127 HEIGHT=30> <PARAM NAME=movie VALUE="IMAGE/xxx.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="IMAGE/xxx.swf" quality=high bgcolor=#FFFFFF WIDTH=127 HEIGHT=30 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> </EMBED></OBJECT></A> どなたか分かりますか?

    • ベストアンサー
    • HTML
  • Flash CS4 + ActionScript 3.0 で swf

    Flash CS4 + ActionScript 3.0 で swf ファイルを作成しました。 メインのタイムラインの 1 フレーム目に ActionScript で stop(); を 指定したのですが、swf 単体で再生(Adobe Flash Player 10で再生)して 確認したところでは問題なく 1 フレーム目で停止しますが、 swf を HTML に配置してブラウザで確認したところ、 ロード時にはメインのタイムラインがすべて再生されてしまいます。 これについての対処法はあるのでしょうか? 自分なりの調べて見つけた方法としては、 ↓こんな感じだったのですが、根本解決ではない気がするので、  何か良い方法があれば、教えてください。よろしくお願いします。 ・外部ファイルを読み込むだけの swf を作って、  実際に再生したい swf を UILoader に読み込む ・全部ムービークリップに入れてしまって、  メインのタイムラインには、そのムービークリップだけ配置する

    • ベストアンサー
    • Flash
  • フォーム内でフォーカス時の緑の枠を取るには

    こんにちわ。FlashMX2004,player7、初心者です。 メールフォームを作り、なまえ、メールアドレス、コメント、送信の四つをタブキー移動できるようにtabIndexで順番を指定しました。 送信ボタンにフォーカスされたときの黄色の枠はとれるようにできましたが、そのほかにフォーカスしたときの緑の枠を取るやり方がわかりません。 ヘルプにFocusManagerで、とありましたが、どのように記載してよいのかわかりません。  お分かりになり方、教えてください。よろしくお願い致します。

    • ベストアンサー
    • Flash

専門家に質問してみよう