- ベストアンサー
UIScrollBarで表示したテキストにリンクを張るには
UIScrollBarに外部ファイルから読み込ませて表示させています。 この表示させているテキストにリンクを張りたいのですが 宜しく、ご指導ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Flash のバージョンなども書かれていませんし, 全体的に意味が非常にわかりにくいです。 まず, UIScrollBarに外部ファイルから読み込ませて表示させているのではなく, テキストフィールド に外部ファイルからテキストを読み込ませて表示させていて, たまたま そのテキストフィールドに UIScrollBar を付けてあるだけではないのでしょうか? 主役はテキストフィールドであって,UIScrollBar はほとんど関係ない気がしますが...。 よくわかりませんが,UIScrollBar は スクリプト上,あまり関係ないものとして回答します。 > 表示させているテキストにリンクを張りたいのですが これも2通りに意味が取れます。 テキストフィールド自体にリンクが張りたいのか, テキストフィールド内に表示したある特定の文字列にリンクが張りたいのか, どちらかわかりませんので,2通り回答します。 まずファイル構造ですが, 全て同じフォルダの直下にあるものとします。 任意のフォルダ ├ top.html (架空のリンク先:無くても良い) ├ ○○.html (○○.swf を表示) ├ ○○.swf (外部テキストを表示) └ gaibu.txt (外部テキスト) ◎ テキストフィールド自体にリンクを張る例 まず, 外部テキスト(ファイル名「gaibu.txt」)として, 次のような内容のデータを用意しておいたとします。 一応,文字コードは Shift-JIS ということにしておきましょうか。 「gaibu.txt」(コピペ可能)↓ ------------------------------------ mydata=こんにちは! これは外部のテキストです。 TOPページに戻りたい方は, このテキストフィールドをクリックしてください。 そういうことで,よろしくです。 ムニャムニャ... スヤスヤ... ゴックン。 では,さようなら。 ----------------------------------- 次に Flash ですが, 複数行表示のダイナミックテキストフィールドがステージ上にあって, そのダイナミックテキストフィールドのインスタンス名が, 「my_txt」 であったとします。 そして,その「my_txt」というダイナミックテキストに, UIScrollBar を付けているものとします。 (付けていても付けていなくてもあまり関係がありませんが。) そして, その「my_txt」 が存在するフレームに次のように書きます(コピペ可能)。 ------------------------------------------ // TextFormatクラスのインスタンス myFormat を作成 myFormat = new TextFormat(); // リンク先の設定 myFormat.url = "top.thml"; myFormat.target = "_self"; // // Shift-JIS で読み込み System.useCodepage = true; // // LoadVarsクラスのインスタンス myVars を作成 myVars = new LoadVars(); // myVars.onLoad の定義 myVars.onLoad = function(seikou) { // 読み込みに成功したら if (seikou) { // テキストフィールドに mydata の値を表示 _root.my_txt.htmlText = this.mydata; // テキストフィールドに myFormat を適用 _root.my_txt.setTextFormat(myFormat); } }; // 外部テキスト 「gaibu.txt」 を myVars に読み込む myVars.load("gaibu.txt"); ------------------------------------------ そして,パブリッシュして, パブリッシュされたSWFのダイナミックテキストフィールドをクリックすれば, 「top.html」 にジャンプするものができます。 //////////////////////////////////////////////////////////// ◎ 表示したある特定の文字列にリンクを張る例 これは,外部テキストに HTML タグを使用して, Flash内でテキストデータを HTML として解釈表示させるのが簡単だと思います。 「gaibu.txt」(コピペ可能)↓ ------------------------------------------ mydata=<i><b>こんにちは!</b></i><br> これは外部のテキストです。<br> TOPページに戻りたい方は,<br> <u><font color="#0000ff"><a href="top.html">ここ</a></font></u> をクリックしてください。<br> そういうことで,よろしくです。<br><br><br> ムニャムニャ...<br><br><br> スヤスヤ...<br><br><br> ゴックン。<br> では,<a href="top.html">さようなら</a>。 ------------------------------------------ 次に Flash ですが, これは上の「テキストフィールド自体にリンクを張る例」と同様です。 複数行表示のダイナミックテキストフィールドがステージ上にあって, そのダイナミックテキストフィールドのインスタンス名が, 「my_txt」 であったとします。 そして, その「my_txt」 が存在するフレームに次のように書きます(コピペ可能)。 ------------------------------ // Shift-JIS で読み込み System.useCodepage = true; // テキストをHTMLとしてレンダリング my_txt.html = true; // 余分な改行などを削除 my_txt.condenseWhite = true; // // LoadVarsクラスのインスタンス myVars を作成 myVars = new LoadVars(); // myVars.onLoad の定義 myVars.onLoad = function(seikou) { // 読み込みに成功したら if (seikou) { // テキストフィールドに mydata の値を表示 _root.my_txt.htmlText = this.mydata; } }; // 外部テキスト 「gaibu.txt」 を myVars に読み込む myVars.load("gaibu.txt"); ------------------------------ そして,パブリッシュして, パブリッシュされたSWFのダイナミックテキストフィールド内に表示される文字列のうち, 「ここ」 と,最後の 「さようなら」 をクリックすれば, 「top.html」 にジャンプするものができます。 「さようなら」 のように, 普通に <a href="○○.html">▲▲</a> と書いただけでは 単にリンクがかかるだけなので, 「ここ」 の方は, アンダーライン入りで青文字にしてみました。 ※ご使用の Flash バージョンを書かれていませんが, 上で回答した2例は, "一応" Flash MX 以上で使用可能な方法とスクリプトです。 ※ "一応" と強調しているのは, コンポーネントはバージョンに強く依存するため, 閲覧可能な Flash Player のバージョンが書けないためです。 例えば Flash 8 で Flash Player 6 用の SWF をパブリッシュしても, Flash Player 6 や 7 では見ることができませんのでご注意を。 ただし, Flash MX で作成した Flash Player 6 用の SWF は, Flash Player 6,7,8,9 のいずれでも見ることができます。 Flash はバージョンによって作成方法やスクリプトが変わりますが, コンポーネントの使用はさらにバージョンによって違いますから 特に注意してください。 「target (TextFormat.target プロパティ) 」 http://livedocs.macromedia.com/flash/8_jp/main/00002817.html 「サポートされている HTML タグについて」 http://livedocs.macromedia.com/flash/8_jp/main/00001459.html ※一応参考URLを書きましたが, この参考URLのスクリプトはそのまま Flash MX では使えません。 Flash MX 2004 以上が必要です。 ※Flash 5 以下に関しましては, UIScrollBar という存在が元から存在しないので, 回答に際して最初から何にも考慮していません。
その他の回答 (1)
#1です。 > テキストとテキストの間に空行が入ってしまうのですが、 こちらではならないのでよくわかりません。 #1のスクリプトでは, -------------------------- // 余分な改行などを削除 my_txt.condenseWhite = true; -------------------------- を入れてあるので, 余分な空行は入らないはずですけど...。 condenseWhite = true; は,外部テキストを読み込む前(読み込むのより上の行)に書いてください。 #1のスクリプトでもそうしていますから, そのままコピペした場合は空行は入らないと思うのですが。 新規でドキュメントを作成してみて, #1のスクリプトをココからコピペして作り直しても, やはり空行は入りません。 例えば外部テキストを次のようにします。 ------------------------------ mydata=吾輩は 猫である<br>名前はまだない。<br> どこで生まれたかとんと見当がつかぬ<br> ------------------------------ これを作った Flash で表示させると,次のようになります。 ------------------------------ 吾輩は 猫である 名前はまだない。 どこで生まれたかとんと見当がつかぬ ------------------------------ 余分な空行は入りません。 my_txt.condenseWhite = true; を削除してしまうと次のように表示されます。 ------------------------------ 吾輩は 猫である 名前はまだない。 どこで生まれたかとんと見当がつかぬ ------------------------------ 外部テキストの作成は, 最終的にはテキストエディタでちゃんと保存していますか? HTML 文書自体の作成は, HTMLエディタ(Dreamweaver や ホームページビルダーなど)でしてもかまいませんが, 保存自体はテキストエディタで保存してください。 言えるのは以上のようなことくらいで, 空行の件は,とにかくなぜ入るのかよくわかりません。
お礼
解決しました。HTMLタグの使い方が適切でなかったようです。 有難うございました。
お礼
ご回答ありがとうございます。私の不十分な説明にもかかわらず、完璧な回答をいただいて大変感謝してます。FlashのバージョンはFlash 8でした。やりたかったことは"表示したある特定の文字列にリンクを張る" でした。いただいた回答をもとにHTMLタグを使えるようになりました。 感謝です。
補足
もうひとつ教えていただきたいのですが、HTMLタグを使用するとテキストとテキストの間に空行が入ってしまうのですが、入らないようにすることはできますか?