トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     MX UI COMPONET のスクロールペインのスクロール
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
newborn
Åê¹ÆNo.18162
投稿日時: 2005-6-17 10:54
常連
居住地: StoneRiverPrefecture
投稿: 170
使用環境:
MX UI COMPONET のスクロールペインのスクロール
お世話になっております,newbornです。
私は、MX 2004 を使用しておりますが、付属のコンポーネント
セット群は、動作が重いため、意図的に MX UI COMPONENT(MXのコンポーネントがMX 2004で動くもの)
を使用しております。

そこで質問なのですが、2004のコンポーネントはマウスの
ホイールでスクロールペインをスクロールさせることが
できますが、これをMX UI COMPONET でも同様の動作をできることは、できますしょうか?

ためしにスクロールペインがフォーカスをもっているかどうか
を判別するべく

_root.scrollPane.onSetFocus(){
trace("pane has focus");
}

上記のようなスクリプトを書いてみましたが、どうも反応しません。

MX 2004 のクラスファイルで該当箇所が書いてありそうなもので『wheel』で検索しても見つかりませんでした。

どなたかよい知恵がありましたら宜しくお願いします。


----------------
☆☆☆☆☆☆NEWBORN☆☆☆☆☆☆

Fumio
Åê¹ÆNo.18164
投稿日時: 2005-6-17 11:41
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
Windows環境でマウスホイールの回転は、Mouse.onMouseWheelイベントとしてリスナーに配信されます。このイベントを処理するスクリプトを何らかのかたちで追加して、ScrollPaneインスタンスを操作することになるのではないでしょうか。
引用:
newbornさんは書きました:
私は、MX 2004 を使用しておりますが、付属のコンポーネント
セット群は、動作が重いため、意図的に MX UI COMPONENT(MXのコンポーネントがMX 2004で動くもの)
を使用しております。

そこで質問なのですが、2004のコンポーネントはマウスの
ホイールでスクロールペインをスクロールさせることが
できますが、これをMX UI COMPONET でも同様の動作をできることは、できますしょうか?

MX 2004のクラスを参考にされるということですか?

mx.containers.ScrollPaneクラスは、mx.core.ScrollViewクラスを継承しています。このScrollViewクラスの中で、Mouseクラスへのリスナーを登録して、Mouse.onMouseWheelイベントを処理しているようです。
引用:
MX 2004 のクラスファイルで該当箇所が書いてありそうなもので『wheel』で検索しても見つかりませんでした。


----------------
 

knagai
Åê¹ÆNo.18165
投稿日時: 2005-6-17 11:44
職人
居住地: 白馬村
投稿: 796
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
確認ですが、MX UI COMPONENTというのは、たぶんFlash MX 2004のコンポーネント・パネルで「FLASH MX UI Components」と表示されているコンポーネントでよいのですよね? いつインストールしたのか忘れました。これとは別に「UI Components」というのもあります「FLASH MX UI Components」のScrollPaneを開いてみると、中のスクリプトはprototypeプロパティが使われているので、おそらくFlash MX用ではないかと想像します。

で、動作ですが、
Flash MX 2004のWindows版のフレーム1に、
mouseListener = {}
mouseListener.onMouseWheel = function(delta){
trace(delta)
scpane.setScrollPosition(delta,0)
};
Mouse.addListener(mouseListener);

で動きはしました。
このスクリプトは、Flash MX 2004の辞書のonMouseWheelからの引用です。
setScrollPosition()は、ScrollPaneを開いて、中のパブリックなメソッドを見て、適当にあてがってみたものです。
動きはしますが、中で別の働きがあるようで、動いた分元に戻されるような動きになります。

ということは、ScrollPaneはScrollBarからの派生コンポーネントで、内部でがっちり構成されていると思われるので、ScrollPaneのスクリプトを読んで理解し、いろいろテストすることが必要かと思います。

ScrollPaneは元々ScrollBarのつまみの位置に反応させるように作られているので、その部分を何とかマウスホイールからの数値で置き換えられるようにすると、何とかなるのではないでしょうか、と想像します。


----------------
永井勝則:
himco.jp :

newborn
Åê¹ÆNo.18166
投稿日時: 2005-6-17 12:06
常連
居住地: StoneRiverPrefecture
投稿: 170
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
野中さん、永井さん、
すばやい返信ありがとうございます。

野中さん、
おっしゃるとおり、mc.core.ScrollViewの部分に記載されておりました。かなり探しはしたもののこの部分が見つけられませんでした。
この部分を参考にMX UI COMPONETSでも同様の動作ができるように変更できないものかと思い探しておりました。
今、さっとしか目を通しておりませんが、
現在フォーカスを保持しているコンポーネントの場合だけスクロールイベントをわたしている部分をさがして見たいと思います。

永井さん、

//永井さんのスクリプトを少し変更させていただきました。

mouseListener = new Object();
mouseListener.onMouseWheel = function(delta) {
trace(delta);
_root.sp2.setScrollPosition( 0,_root.sp2.getScrollPosition().y-delta*2);
};
Mouse.addListener(mouseListener);

提示していただいたスクリプトだと、スクロールはできるのですが、スクロールペインがフォーカスを受けていない時にもスクロールペインがスクロールされてしまいます。


----------------
☆☆☆☆☆☆NEWBORN☆☆☆☆☆☆

Fumio
Åê¹ÆNo.18167
投稿日時: 2005-6-17 13:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
他の閲覧者や後々の検索の便として:
引用:
Flash TechNote「Macromedia Flash MX 2004 での Flash MX コンポーネントの使用」より:
Flash MXに付属しているMacromedia Flash MX (v1)のオリジナルコンポーネントはMacromedia Flash MX 2004でもサポートされますが、それはバージョン 6のSWFファイルをパブリッシュする場合に限られます。これらのバージョン6のSWFファイルは、Macromedia Flash Player 7で正常に機能します。

Macromedia Flash MXのUIコンポーネント(Macromedia Flash MXに付属してリリースされたUIコンポーネント)は、Macromedia Flash MX 2004で使用できるようにアップデートされたため、Macromedia Flash Player 7でパブリッシュすることができます。アップデートされたコンポーネントは、 その他のダウンロードからダウンロードすることが可能です。

Macromedia Flash MX の UIコンポーネントを含むバージョン 7のSWFファイルをパブリッシュする場合は、これらの更新済みコンポーネントを使用する必要があります。

ただし、「ダウンロード」のページからは、その掲載がなくなっているようです。米国サイトのFlash Extentionで「Flash MX Components for Flash MX 2004, V1.5.0」が見つかりました。おそらくこれでよいでしょう。
引用:
永井勝則さんは書きました:
確認ですが、MX UI COMPONENTというのは、たぶんFlash MX 2004のコンポーネント・パネルで「FLASH MX UI Components」と表示されているコンポーネントでよいのですよね? いつインストールしたのか忘れました。これとは別に「UI Components」というのもあります「FLASH MX UI Components」のScrollPaneを開いてみると、中のスクリプトはprototypeプロパティが使われているので、おそらくFlash MX用ではないかと想像します。


----------------
 

newborn
Åê¹ÆNo.18169
投稿日時: 2005-6-17 13:59
常連
居住地: StoneRiverPrefecture
投稿: 170
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
野中さん、
上記のフォロー参考文章ありがとうございます。

ScrollView.asを見てみました。
function init でマウスにリスナーを追加して、
マウスホイールのイベントが発生した際に、
function __onMouseWheelが呼びだされているのは、
理解できるのですが、一体どこでフォーカスを受けている
コンポーネントだけでこのイベントを発生するように
制御しているのでしょうか?
もしも、Mouse.onMouseWheelが発生した時は、すべてのリスナー
にイベントが送られると思うのですが、、、

もしなにか私が見落としている点がありましたらご教授
お願いいたします。




// init variables and create internal objects
function init(Void):Void
{
super.init();
__viewMetrics = new Object();
if (_global.__SVMouseWheelManager==undefined) {
var s = _global.__SVMouseWheelManager = new Object();
s.onMouseWheel = this.__onMouseWheel;
Mouse.addListener(s);
}
}

function __onMouseWheel(delta:Number, scrollTarget:MovieClip) : Void
{
var i = scrollTarget;
var sT;
while(i!=undefined) {
if (i instanceof mx.core.ScrollView) {
sT = i;
delete i;
}
i = i._parent;
}
if (sT!=undefined) {
var i = (delta<=0) ? 1 : -1;
var l = sT.vScroller.lineScrollSize;
if (l==undefined) l=0;
l = Math.max(Math.abs(delta), l);
var nPos = sT.vPosition + l*i;
sT.vPosition = Math.max(0, Math.min(nPos, sT.maxVPosition));
sT.dispatchEvent({type:"scroll", direction:"vertical", position:sT.vPosition });
}
}


----------------
☆☆☆☆☆☆NEWBORN☆☆☆☆☆☆

Fumio
Åê¹ÆNo.18171
投稿日時: 2005-6-17 15:38
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
Mouse.onMouseWheelイベントは、第2引数として「マウスポインタが置かれた位置の一番上のムービークリップインスタンス」(「ActionScriptリファレンスガイド」)を受取ります。
引用:
newbornさんは書きました:
ScrollView.asを見てみました。
function init でマウスにリスナーを追加して、
マウスホイールのイベントが発生した際に、
function __onMouseWheelが呼びだされているのは、
理解できるのですが、一体どこでフォーカスを受けている
コンポーネントだけでこのイベントを発生するように
制御しているのでしょうか?

mx.core.ScrollViewクラスについては、リスナーはひとつしか作成しない仕組みになっています。
    function init(Void):Void
    {
        super.init();
        __viewMetrics = new Object();
        if (_global.__SVMouseWheelManager==undefined) {
            var s = _global.__SVMouseWheelManager = new Object();
            s.onMouseWheel = this.__onMouseWheel;
            Mouse.addListener(s);
引用:
もしも、Mouse.onMouseWheelが発生した時は、すべてのリスナー
にイベントが送られると思うのですが、、、

mx.core.ScrollViewクラスでは、さらにそのインスタンスがScrollViewを継承しているかなどを評価したうえで、処理を行っているようです。
_global.__SVMouseWheelManager.onMouseWheel = 
    function(delta:Number, scrollTarget:MovieClip) {
    // function __onMouseWheel(delta:Number, scrollTarget:MovieClip) : Void
    {
        trace(scrollTarget);  // 確認用
        var i = scrollTarget;
        var sT;
        while(i!=undefined) {
            if (i instanceof mx.core.ScrollView) {


----------------
 

newborn
Åê¹ÆNo.18172
投稿日時: 2005-6-17 16:01
常連
居住地: StoneRiverPrefecture
投稿: 170
使用環境:
Re: MX UI COMPONET のスクロールペインのスクロール
野中さん、
ご返信ありがとうございます。

引用:

Mouse.onMouseWheelイベントは、第2引数として「マウスポインタが置かれた位置の一番上のムービークリップインスタンス」(「ActionScriptリファレンスガイド」)を受取ります。


Mouse.onMouseWheelのリファレンスガイドを見てはいたものの、
ちゃんとは見てなかったようです。
第二引数のそんざい、バッチリ見逃しておりました。



var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta, target) {
	trace(target);
	target = String(target);
	spTarget = _root.sp2.getScrollContent();
	trace(target.indexOf(spTarget));
	if (target.indexOf(spTarget) != -1) {
		_root.sp2.setScrollPosition(0, _root.sp2.getScrollPosition().y-delta*6);
	}
};
Mouse.addListener(mouseListener);


スクリプトを変更して、ある程度思い通りの動作ができるように
なりました。後は微調整したいと思います。

大変ありがとうござりました。


----------------
☆☆☆☆☆☆NEWBORN☆☆☆☆☆☆

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops