2012-01-18 4 views
2

Итак, у меня есть это текстовое поле dyanamic, называемое logtxt, и у меня есть UIScrollbar, прикрепленный к нему. Он работает, но только если я добавлю его, введя/вставив его в текстовое поле. Мне нужно, чтобы он работал, когда я добавляю текст через код. (он правильно связан с инспектором компонентов)Компонент UIScrollbar, не работающий во флэш-памяти cs4

ответ

0

Я сделал movieclips drag_mc и track_mc и поместил их в видеоклип под названием scroll_mc. Тогда у меня есть класс для создания полосы прокрутки:

package { 
    import flash.display.Stage; 
    import flash.display.MovieClip; 
    import flash.events.*; 
    import flash.geom.Rectangle; 

class MakeScrollBar { 
    private var host_mc:MovieClip; 
    private var call_back:Function; 

    private var drag_mc:MovieClip; 
    private var track_mc:MovieClip; 

    private var scroll_rect:Rectangle; 
    private var upper_limit:Number; 
    private var range:Number; 

    public function MakeScrollBar(_mc:MovieClip, cb:Function) { 
     host_mc = _mc; 
     call_back = cb; 

     drag_mc = host_mc.drag_mc; // 
     drag_mc.buttonMode = true; 
     drag_mc.mouseChildren = false 
     drag_mc.addEventListener(MouseEvent.MOUSE_DOWN, press_drag); 
     track_mc = host_mc.track_mc; 
     track_mc.buttonMode = true; 
     track_mc.mouseChildren = false 
     track_mc.addEventListener(MouseEvent.CLICK, click_track); 

     set_limits(); 

    } 

    private function press_drag(event:MouseEvent):void { 
     drag_mc.stage.addEventListener(MouseEvent.MOUSE_UP, release_drag, false, 0, true); 

     drag_mc.startDrag(false, scroll_rect); 
     drag_mc.addEventListener(Event.ENTER_FRAME, drag); 
    } 

    private function release_drag(event:MouseEvent):void { 
     drag_mc.removeEventListener(Event.ENTER_FRAME, drag); 
     drag_mc.stage.removeEventListener(MouseEvent.MOUSE_UP, release_drag); 
     drag_mc.stopDrag(); 
    } 

    private function click_track(event:MouseEvent):void { 
     trace("Click track"); 
    } 

    private function set_limits():void { 
     scroll_rect = new Rectangle(track_mc.x, track_mc.y, 0, track_mc.height - drag_mc.height); 
     upper_limit = track_mc.y; 
     range = track_mc.height - drag_mc.height; 
    } 

    private function drag(event:Event):void { 
     var p = (drag_mc.y - track_mc.y)/range; 
     call_back(p); 
    } 
} 
} 

и класс документа

package { 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import flash.text.TextField; 
    import flash.events.MouseEvent; 

    public class ScrollBarAS3 extends Sprite { 
     public var my_scrollbar:MakeScrollBar; 

     public function ScrollBarAS3() { 
      my_scrollbar = new MakeScrollBar(scroll_mc, scroll_text); 
     } 

     public function scroll_text(n:Number) { 
      scroll_txt.scrollV = Math.round((scroll_txt.maxScrollV - 1) * n) + 1; 
     } 
    } 
} 

scroll_txt является текстовое поле

получил его от http://www.webdevils.com/2007/10/13/as3-version-of-scrollbar-class/

0

«Мне нужно, чтобы он работал, когда я добавляю текст через код».

Вы можете сделать это через код без проблем, например, положите это на свою основную шкалу времени;

import fl.controls.TextArea; 

var myText:String = "Here is some text, notice how there will a automatigical scroll bar when needed :)"; 

var textarea_comp:TextArea = new TextArea(); 
textarea_comp.text = myText; 
textarea_comp.height = 60; 
addChild (textarea_comp); 

Если вы хотите сделать это с существующим текстовым полем, поставить это на этот код в месте, которое находится в контексте, в котором он находится.

+0

она до сих пор не работает – thor625

+0

thor625 вам нужно предоставить гораздо больше информации для тех, кто вам поможет. Покажите нам код, который не работает и где он у вас есть, расскажите нам больше о ваших требованиях и о шагах, которые вы предприняли до сих пор, пожалуйста, уточните. – imp

+0

Хорошо, я понял, как создать свою собственную полосу прокрутки, но спасибо. я выложу awnser – thor625