• 締切済み

スクロールバーの自作の仕方

テキストフィールドにスクロールバーをつけようと思いUIScrollBarを使用したのですが、 少々味気ないのでマウスホイール対応のスクロールバーを自作しようと思ってます。 しかしWEBで検索してもサンプルを配布しているサイトは多数あったのですが、一から解説しているサイトは発見できませんでした。 お手数ですが、スクロールバーの自作の仕方を教えて頂けないでしょうか。 FLASH製作の知識が全くといっていいほどないので、分かりやすく教えていただければ助かります。 ちなみに製作ソフトはFLASH8を使っています。 よろしくお願いします。

  • Flash
  • 回答数1
  • ありがとう数4

みんなの回答

noname#35109
noname#35109
回答No.1

先にツッコミを入れさせていただいでかまわないでしょうか。 UIScrollBar を付けたテキストフィールドを一度クリックして, マウスホイールを回転させると,テキストフィールド の文字もスクロールしますし, スクロールバーもスクロールしますけど...。 UIScrollBarは元からマウスホイール対応のスクロールバーです。 と言うかですね, UIScrollBar を付けなくても, 単なるダイナミックテキストフィールドやテキスト入力のテキストフィールドを用意しただけで, マウスホイールの回転でテキストはスクロールします。 例えば,こちらのサンプルでも (どこのサンプルでも), マウスホイールの回転でテキストはスクロールします↓。 「action script_テキストスクロール」 http://www.flashiroha.com/script/as5.html 私の環境は Windows XP ,Flash Player 9 です。 お使いの OS が Mac だと, マウスホイールでスクロールさせられないのかもしれませんが, それは ActionScript でいくら頑張ってもできません。 ですから, 自作しても,スクロールできない物はスクロールできませんし, スクロールできる場合は自作しなくても元からスクロールできます。 Google 検索「onMouseWheel Mac」 http://www.google.co.jp/search?hl=ja&q=onMouseWheel+Mac&lr=lang_ja ///////////////////////////////////////////// ですから, 上記のマウスホイール の話とは別問題として, 簡単にテキストフィールドに付けるスクロールバーを自作する方法(スクリプト)を説明します。 しかし,その前に, > WEBで検索してもサンプルを配布しているサイトは多数あったのですが、 > 一から解説しているサイトは発見できませんでした。 ココは図入りで説明できたり,サンプルを置けるような一般的なサイトではありませんよ。 普通のサイトのようにちゃんと説明できるはずは元からありません。 どれだけの紙面とどれだけの画像とサンプルを用意しなければならないのかわかっていらっしゃいますか? ですから, 簡単に スクロールバー の "バー" の部分についてのみ, 私流の作り方の簡易版を説明します。 Flash のヘルプで次のページのようなことを理解すると, ある程度の簡易版が作れます↓。 scroll (TextField.scroll プロパティ) http://livedocs.macromedia.com/flash/8_jp/main/00002773.html maxscroll (TextField.maxscroll プロパティ) http://livedocs.macromedia.com/flash/8_jp/main/00002755.html startDrag 関数 http://livedocs.macromedia.com/flash/8_jp/main/00001769.html まず, ステージ上に,3~4行ほどのテキストが表示できる小さめのダイナミックテキストのテキストフィールドを作成します。 そして,プロパティインスペクタ(プロパティパネル)で, 文字の色は黒など背景色以外の色を指定して,「複数行」の設定にしてください。 そしてインスタンス名を付けますがこの説明では 「my_txt」 というインスタンス名を付けたとしておきます。 その小さめのテキストフィールドの右横に, バーとなる 塗りの長方形 を矩形ツールで描きます。 長さはテキストフィールドの高さより短くしてください。 その 塗りの長方形 を選択して, 「修正」→「シンボルに変換」でムービークリップシンボルに変換するわけですが, その変換するときの基準点の位置を 「左上」 にしてください。            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 変換できましたら,インスタンス名を付けるのですが, この説明では 「my_bar」 というインスタンス名を付けたとしておきます。   ↓「my_txt」       ↓「my_bar」   □□□□□□□□□□ ■  □□□□□□□□□□ ■  □□□□□□□□□□ ■  □□□□□□□□□□  □□□□□□□□□□ そして, フレームに次のようなスクリプトを書けば, 「簡易版スクロールバー」の「バー」の部分だけの完成です。 ///////////////////////////////////////////////////////////////// // データの用意 my_txt.text = "あいうえお\nか\nさ\nた\nな\nは\nま\nや\nら\nわ\nん"; // // スクロール数 の初期化 var scr = 0; // スクロールフラグの初期化 var scr_flg = 0; // // ---1行スクロールさせるための my_bar の移動量の算出--- // my_txt の最大スクロール数の取得 var max = my_txt.maxscroll; // my_bar の全移動範囲を算出 var all = _root.my_txt._height-_root.my_bar._height; // 1行スクロールさせるための my_bar の移動量の算出 var mov = all/max; // trace(max);//←確認してみたりする... // // 1フレーム進む時間ごとに毎回実行 _root.my_bar.onEnterFrame = function() { if (scr_flg == 0) { // my_bar の座標を決定 _root.my_bar._y = _root.my_txt._y+_root.my_txt.scroll*_root.mov; } else { // my_txt のスクロール数を決定 _root.my_txt.scroll = Math.round((this._y-_root.my_txt._y)/_root.mov); } }; // // バーをプレスしたとき _root.my_bar.onPress = function() { // スクロールフラグ を1にする _root.scr_flg = 1; // ドラッグ開始(中心に固定しない,左,上,右,下の移動範囲) this.startDrag(false, this._x, _root.my_txt._y, this._x, _root.my_txt._y+_root.all); }; // バーからマウスをアップしたとき _root.my_bar.onRelease = function() { _root.scr_flg = 0; this.stopDrag(); }; // バーからドラッグアウトしたとき(onReleaseと同じ) _root.my_bar.onDragOut = _root.my_bar.onRelease; ///////////////////////////////////////////////////////////////// 上記は,あくまでも 私流の簡易版 です。 あとは理解して, ▲ボタン と ▼ボタン も作れば良いということになります。 おそらく,これくらいな簡単なものは, サッサと理解し,▲ボタン と ▼ボタン も作れる方でないと, 実際のスクロールバーの作成方法などはどのサイトも理解できないと思いますし, カスタマイズもできないと思います。 その前に, 上記ぐらいのものはサッサと自作できるような方でないと, ちゃんとしたスクロールバーは, どんなサンプルや説明を見ても理解不能だと思いますよ。 スクロールバーに限らず, たくさんのものを自分で考えて自作することです。 すると,UIScrollBarレベルのすごい物がそのうち作れるようになると思います(多分,かなり自信なし)。 UIScrollBar は Macromedia の開発者が寄り集って検討し,試作を繰りかえした結果の産物ですから, なかなかあのレベルのものを作るのは難しいとは思いますけどね。 ~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・ ★ 以下は余談であり,本題かも。 Windows で Flash 8 をデフォルトの C:\Program Files にインストールした場合, 「C:\Program Files\Macromedia\Flash 8\ja\Configuration\Components\User Interface」 というフォルダに, 「UIScrollBar.swc」というファイルができます。 これが,UIScrollBar の本体です。 この 「UIScrollBar.swc」 をデスクトップなどにコピーして, コピーしたものの拡張子を手動で .zip に変えてやります。 つまり 「UIScrollBar.zip」に名前を変更するということです。 それでその「UIScrollBar.zip」を圧縮解凍ソフトなどで解凍すると, 35個のファイルが出てきます。 「catalog.xml」や「LivePreview.swf」というファイルもありますが, 大半は拡張子 .asi というファイルです。  mx.controls.Button.asi  mx.controls.HScrollBar.asi  mx.controls.scrollClasses.ScrollBar.asi    ~ 略 ~  mx.styles.StyleManager.asi この .asi ファイルは実はテキストファイルで, メモ帳などテキストエディタで見ることができます。 例えば1つめの「mx.controls.Button.asi」を開いてみると, ---------------------------------------- import mx.core.UIObject; import mx.controls.SimpleButton; import mx.core.UIComponent; [Event("click")] [TagName("Button")] [IconFile("Button.png")] intrinsic class mx.controls.Button extends mx.controls.SimpleButton { public function Button(); public var __label:String; public var __labelPlacement:String; public var _color; public function _getIcon(Void):String; public var _iconLinkageName:String; [Bindable] [ChangeEvent("click")] public var _inherited_selected:Boolean; public function _setIcon(linkage):Void; public var borderW:Number; public var btnOffset:Number; public function calcSize(tag:Number, ref:Object):Void; public var centerContent:Boolean; public var className:String; public var clipParameters:Object; public function createChildren(Void):Void; public function draw(); public var falseDisabledIcon:String; public var falseDisabledSkin:String; public var falseDownIcon:String; public var falseDownSkin:String; public var falseOverIcon:String; public var falseOverSkin:String; public var falseUpIcon:String; public var falseUpSkin:String; public function getBtnOffset(Void):Number; public function getLabel(Void):String; public function getLabelPlacement(Void):String; public var hitArea_mc:MovieClip; function get icon():String; [Inspectable(defaultValue="")] function set icon(linkage); public function init(Void):Void; public var initIcon; public function invalidateStyle(c:String):Void; [Inspectable(defaultValue="Button")] function set label(lbl:String); function get label():String; public var labelPath:Object; [Inspectable(enumeration="left,right,top,bottom"defaultValue="right")] function set labelPlacement(val:String); function get labelPlacement():String; static var mergedClipParameters:Boolean; public function onRelease(Void):Void; public function setColor(c:Number):Void; public function setEnabled(enable:Boolean):Void; public function setHitArea(w:Number, h:Number); public function setLabel(label:String):Void; public function setLabelPlacement(val:String):Void; public function setSkin(tag:Number, linkageName:String, initobj:Object):MovieClip; public function setView(offset:Number):Void; public function size(Void):Void; static var symbolName:String; static var symbolOwner; public var trueDisabledIcon:String; public var trueDisabledSkin:String; public var trueDownIcon:String; public var trueDownSkin:String; public var trueOverIcon:String; public var trueOverSkin:String; public var trueUpIcon:String; public var trueUpSkin:String; static var version:String; public function viewSkin(varName:String):Void; }; ---------------------------------------- すごい行のスクリプトですが, これは実はスクリプト本体ではなく, クラスファイルの呼びだしと,変数の宣言部分だけです。 それに,UIScrollBar はスクリプトだけで動くわけはなく, 複雑なムービークリップの入れ子状態の構造とスクリプトが連携してまともに動くのです。 そんなものを一々解析もできませんし,解説もできません。 もし,解説できたら,UIScrollBarだけで分厚い本になってしまうと思いますし, そんな本を売ってもおそらく誰も買いません。 ちゃんとしたスクロールバーの作り方を解説するなんて不可能なことがわかりますか? そんなことをする時間があったら, 最初から UIScrollBar を何も文句を言わずに使うか, 文句があるのなら,簡易でも良いので,自分で考えて自作することです。 それが手っとり早いですよ。 簡易でも良いので,自分で考えて自作することができなければ, 上にも書きましたが, スクロールバーに限らず, たくさんのものを自分で考えて自作することです。 すると,UIScrollBarレベルのすごい物がそのうち作れるようになる....と思います(???)。 思えませんが,近い物は作れるようになると思います。 ~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・ ★★ 結局これが本題かも。 > 少々味気ないのでマウスホイール対応のスクロールバーを ひょっとして,味気ないのは動きの問題ではなく, UIScrollBar の見かけの問題でしょうか? もしそうであれば, 次の方法でUIScrollBarの見かけだけを簡単に変更できますよ。 「ドキュメントのコンポーネントスキンの編集」 http://livedocs.macromedia.com/flash/8_jp/main/00003003.html テキストフィールドに UIScrollBar を付けた段階で, [ファイル]-[読み込み]-[外部ライブラリを開く] を選択して, Windows で Flash 8 をデフォルトの C:\Program Files にインストールした場合, C:\Program Files\Macromedia\Flash 8\ja\Configuration\ComponentFLA\SampleTheme.fla のライブラリを読み込み, そのライブラリ内の 「Flash UI Components 2」ライブラリフォルダ内の「SampleTheme」をステージ上に引きずりだして, その▼や▲やバーの色などを塗りかえては「制御」→「ムービープレビュー」で確かめると, UIScrollBar の外観が変わります。 「SampleTheme」をステージ上に引きずりだして,編集したあとは,ステージ上から消しておけば良いです。 単にこれだけのことだと, ActionScript や 最初から自作 など考えなくて良いので楽です。

640105
質問者

お礼

返信が遅れて申しわけありません。 丁寧な説明、ありがとうございました。 スクロールバーの外観を変えたかったので、 非常にためになりました。 本当にご丁寧にどうもありがとうございました。

関連するQ&A

  • UIScrollBarを利用したスクロールバーが見えない

    Flash8を使ってAS2.0で書いています。 ダイナミックテキストフィールドに、スクロールバーを表示させたいため、 www.helpexamples.com/flash/lorem.txt の下半分を参考にして、ActionScrioptでスクロールバーを作成しようとしています。 しかし、このページに載っているサンプルコードをそのままコピー&ペーストしても、 スクロール動作自体には問題ないものの、 スクロールバー本体が表示されません。 これでは、一見して文章の続きがあるかがわかりにくいので、 コンポーネントパネルからドラッグして作成した場合のように、 スクロールバーを表示させたいのですが、方法がわかりません。 this.createClassObject(mx.controls.UIScrollBar, "my_sb", 20); の最後の20という数字をいろいろ変えてみたり、 my_sb.move(my_txt._x + my_txt._width, my_txt._y); の中の数値を色々変えてみたりしたのですが、表示されませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FLASH8でテキストに付属させるスクロールバーがうまく付けられません

    FLASH8を使っています。 テキストに付属させるスクロールバーの設置がうまくいきません。 外部のテキストファイルを読み込ませているんですが、 テキスト部分は問題なく設定できました。 スクロールバーをコンポーネントのUIScrollBarで設置しましたが プレビューを見るとスクロールバーの部分が 真っ白で表示がおかしく、機能もしません。 テキストの範囲内に設置もしていますし 何が原因なのかわからない状態です。 どなたか解決策を教えて頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript3.0でスクロールバー

    お世話になります。 ActionScript3.0とflashの勉強中で、表題のところで詰まってしまいお尋ねしたいことができました。 flash上のダイナミックテキストフィールドにスクロールバーを付けたいのですが、 以下のように記述してもどうしてもコンパイル時にエラーが出てしまいます。 これだけでは定義が不足なのでしょうか…… お力添えいただければ幸いです。 よろしくお願いします。 使用ツール:Adobe flash CS4、FlashDevelop(ActionSctript3.0) ----- import fl.controls.ScrollBarDirection; import fl.controls.UIScrollBar; var myTextField:TextField = new TextField(); myTextField.width = 160; myTextField.height = 120; myTextField.border = true; myTextField.x = 10; myTextField.y = 10; addChild(myTextField); var hScrollBar:UIScrollBar = new UIScrollBar(); hScrollBar.direction = ScrollBarDirection.HORIZONTAL; hScrollBar.scrollTarget = myTextField; hScrollBar.width = myTextField.width; hScrollBar.move(myTextField.x, myTextField.y + myTextField.height); addChild(hScrollBar); var txt:String = "てすと"; myTextField.text = txt; vScrollBar.update(); ----- 発生エラー文 1046: 型が見つからないか、コンパイル時定数ではありません : UIScrollBar

  • スクロールバーの設定

    外部テキストを読み込んで、autoSizeのテキストフィールドに表示させ、そのテキストフィールドにスクロールバーをつけたいと考えています。 外部テキストを読み込んで、autoSizeのテキストフィールドに表示させることはできました。 スクロールバーの方は、テキストフィールドに付いてはいるんですがautoSizeに対応しないため、機能せず。という状況です。 環境:Windows XP/Flash MX 色々調べても解決出来なかったので困っています。 よろしくお願いします。

  • スクロールバーが一番したまで来たときにボタンが表示される。

    質問させてください。 createtextfieldでつくったテキストフィールドにコンポーネントを使って、スクロールバーを適用させています。 そのスクロールバーのスライダが一番下まで来たときに、ボタンを表示させたいのです。 しかし、その条件設定がどうしたらいいのかわからず、なやんでいます。 自作のスクロールボタンだと、ボタンを押したときにmaxscrollなら、という条件設定で実現できたのですが、コンポーネントの場合は、どういう風にすればいいのかわからず、困っています。 もしよろしかったら、教えていただければ、幸いです。 私が使っているのは、 WIN XP FLASH MX 2004 です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • スクロール

    こんにちは。 FLASH MXを使ってます。 縦にスクロールさせたいのですが、いろんなサイトをみてサンプルをDLしてやってるんですが動作しません。 スクロールバーにactionscriptは、sample通りやってます。  あと、マスクがよくわかりません。 お願いします。

  • createTextFieldで作ったテキストフィールドにスクロールバーをとりつける。

    テキストツールでダイナミックテキストのフィールドをつくり、そこにコーンポーネントを適用させたら、スクロールバーがつく、とわかったのですが、スクリプトでテキストのフィールドをつくり、そのテキストフィールドにコンポーネントを適用させて、スクロールバーを取り付ける事はできないのでしょうか? this.createTextField("my_txt", 10, 5, 60, 205, 240); my_txt.htmltext = _level0.entry; このようにして、テキストフィールドに外部テキストをよみこんでいます。 アドバイスをいただきたいです。 http://livedocs.macromedia.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00004232.html このページを見てもよく分からなく、スクロールバーの取り付けができません。 私が使っているのは、Windows XP Flash MX Professional 2004です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • テキストボックスにスクロールバーをつける

    はじめましてFLASH初心者です テキストが長すぎるので スクロールバーをつけて すっきりみせたいのですが やりかたさっぱりわかりません。。。 WEBでいろいろ調べたのですが どれもサンプルのみで解説などが なかったです(汗 外部テキストを読み込まなくてもいいので 一番簡単な方法などありましたら教えてください。 またそのような説明があるサイトがありましたら 教えてください。 お願いいたします。

    • ベストアンサー
    • Flash
  • スクロールバーをカスタマイズするには?

    JavaScriptでスクロールバーをカスタマイズすることが出来たかと 思うのですが、どうしてもサンプルが見つかりません。 (cssで色を変えるなどではなく、スクロールバー自体を画像でデザイン し、スクロールバーの働きをさせたいと思っています。) 参考サイトやアドバイスをいただければ幸いです。 どうぞよろしくお願いいたします。

  • スクロールバーの非表示+繰り返し

    現在、FLASHで作品を作成していて、ActionScriptを勉強中なのですが、あるところで詰まってしまい質問させていただくことになりました。 その詰まっているところとは、『繰り返し文を用いて、スクロールバーを非表示にする』ということです。 同じようなページを多数作成していて、その中でテキストを表示させる画面があるのですが、そのテキストの長さがまちまちなので、テキストの長さを判別してスクロールの必要がなければ、スクロールバーを非表示にする。ということです。 そしてデータが多量ゆえ効率化しようとおもい、繰り返し文を用いて効率化しようとしたのですが、なかなかうまくいかず困っています。 現状のスクリプトでは、1ページ目はきちんとスクロールバーの表示・非表示がされるのですが、2ページ目以降に遷移すると非表示になるはずのスクロールバーが真っ白の状態で表示されてしまっているのです。 ちなみに使用しているスクロールバーは、コーポネントの中にある「UIScrollbar」です。 なお、ActionScriptは以下のようになっております。 //sub_bar=スクロールバー(sub2_barも同義) //sub=テキスト(sub2も同義) for (i=1; i<=10; i++) { //スクロールの必要がないならスクロールバーを非表示 this["sub_bar"+i]._visible = (this["sub"+i].maxscroll<=1) ? false : true; this["sub2_bar"+i]._visible = (this["sub2"+i].maxscroll<=1) ? false : true; } テキストのインスタンス名は"sub1,sub2,sub3…"といったように、 スクロールバーのインスタンス名は"sub_bar1,sub_bar2,sub_bar3…"といったようになっております。 質問でよくわからない点、足りない点があれば、補足いたしますのでおっしゃってください。 よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう