0

編集不可のtextFieldにスクロールバーを実装しています。また、pageup、pagedown、end、mousewheel も有効にする必要があります。時々ホイールを除いて、すべてが機能します。setselectionを介してキーボードの「カーソル」が更新されるようにする には、最初に表示される文字インデックスを取得する必要があります。scrollVで試しましたが、うまくいかないことがあります。

更新: コードを追加しました。注: 私はたくさんプレイしてきましたが、これは半有効なソリューションです。

スクロールバーのスクロール時:

_TextField.scrollV = pValue*_TextField.maxScrollV

キーボード上:

 if( pEvent.keyCode==Keyboard.UP ) {
            _TextField.scrollV--
        }
        if( pEvent.keyCode==Keyboard.DOWN ) {
            _TextField.scrollV++
        }
        if( pEvent.keyCode==Keyboard.END ) {
            _TextField.setSelection(_TextField.length,_TextField.length)
            _TextField.scrollV = _TextField.maxScrollV;
        }
        if( pEvent.keyCode==Keyboard.HOME ) {
            _TextField.setSelection(0,0)workaround 
            _TextField.scrollV = 1;
        }
        setTimeout(scrollBarUpdate, 0, 0);

ホイール上:

_TextField.scrollV -= pEvent.delta;

        var firstShownLine:int = _TextField.getLineIndexAtPoint(10,10)
        if( firstShownLine != -1 ){
            if(stage.focus == _TextField){
                var currentIndex:int =  _TextField.getLineOffset(firstShownLine);
                var offsetUp:int    =   _TextField.getLineLength(_TextField.scrollV) * 2 + 2; 
                var offsetDown:int  =   _TextField.getLineLength(_TextField.scrollV - 1) * 2 + 2; 
                if(pEvent.delta>0){
                    _TextField.setSelection(currentIndex-offsetUp,currentIndex-offsetUp);
                }
                else{
                    _TextField.setSelection(currentIndex+offsetDown,currentIndex+offsetDown); 
                }
            }
        }

        scrollBarUpdate();
4

0 に答える 0