Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Следить за переменной (http://www.flasher.ru/forum/showthread.php?t=119539)

klafuda_klalafu 23.12.2008 16:05

Следить за переменной
 
Как то делал еще на AS 2.0.
Следильщик за переменной, как тока она изменяется происходит какое то событие....
так вот как сделать такое на AS 3.0 ?
к примеру есть переменная. и как тока она изменилась срабатывает некий следильщик...
забыл напрочь как называется ..... что то типа вотчер или как то так... :(

Добавлено через 4 минуты
Опа нашел вот что
http://www.flasher.ru/forum/showthre...ighlight=watch
однако не помогло в решении моей проблеммы :(

musat 23.12.2008 16:16

Код AS3:

package {
    import flash.events.Event;
    import flash.events.EventDispatcher;
 
    public class Test extends EventDispatcher {
        private var _val:int;
 
        public function set val(value:int):void {
            _val = value;
            dispatchEvent(new Event("variableChanged"));
        }
    }
}


klafuda_klalafu 23.12.2008 16:26

не могу почувствовать логики ? и как это юзать?:)
тут похоже выхвачено часть кода... щас попробую что нить сделать ....

Fernando Costa 23.12.2008 16:32

Код AS3:

var test:Test = new Test();
test.addEventListener("variableChanged",func)
private function func(e:Event){
    trace("changed")
}
 
test.val  = 5;


klafuda_klalafu 23.12.2008 17:01

Вот теперь все понятно стало!
Спасибо АГРОМНОЕ!
то что доктор прописал

Добавлено через 30 минут
И все таки вы поняли неверно!...
смысл вот в чем есть тектовое окошко в нем есть теги картинок но как тока картинка загружена размер окошечка увеличивается и иногда выходит за пределы экрана... Тут чего то не то ... по крайней мере вы мне предлагаете просто следить за переменной test.val....
или я опять что то не понял :(

Fernando Costa 23.12.2008 18:09

кто куда загружается? дайте код

sterh 23.12.2008 18:09

А за какой именно переменной надо "следить"? тектовое_окошко.width может?
Может спасет событие RESIZE?

Имеется в виду объект тип TextField?
Я правильно понял?

klafuda_klalafu 23.12.2008 18:27

Код AS3:

package{
        import flash.display.*;
        import flash.text.*;
        import flash.events.*;
        public class InformMessage{
                public var infomText:TextField; // текстовый блок
                private var informTextFormat:TextFormat;// формат текста информативного окна
                private var ROOT:Object;//корень
                //==================
                //Конструктор класса
                //==================
                public function InformMessage(_ROOT:Object):void{
                        ROOT = _ROOT;
                        informTextFormat = new TextFormat("Tahoma",10,0x000000);
                        infomText = new TextField();
                        infomText.multiline  = true;
                        infomText.wordWrap = false;
                        infomText.selectable = false;
                        infomText.border = true;
                        infomText.autoSize = TextFieldAutoSize.LEFT;
                        infomText.background = true;
                        infomText.backgroundColor = 0xF1F1BF;
                        infomText.defaultTextFormat = informTextFormat;
                }
                //=====================
                //показать/скрыть текст
                //=====================
                public function showText(Hide:Boolean, Tx:String=""):void{
                        if(!Hide){
                                var dx:Number =0;
                                var dy:Number = 0;
                                infomText.htmlText = Tx;                               
                                if(ROOT.mouseX>ROOT.stage.stageWidth-infomText.width){
                                        dx=infomText.width+20
                                }
                                if(ROOT.mouseY>ROOT.stage.stageHeight-infomText.height){
                                        dy=infomText.height+20;
                                }
                                //if(ROOT.mouseX>)
                                with(ROOT.addChild(infomText)){
                                        x = ROOT.mouseX+10-dx;
                                        y = ROOT.mouseY+10-dy;
                                }
                        }
                        else{
                                try{
                                        ROOT.removeChild(infomText);
                                }catch(error:Error){
                                }
                        }
                }
        }
}

А затык весь в том что:
Tx это текст форматированый html... и там могут быть картинки которые не мгновенно появляются а после того как прогрузятся, и когда сообщение у края окна то появляется картинка но она ниже экрана, я хочу повесить слушатель который отловит изменения размера текстового поля и пододвинет текстовое сообщение относительно экрана, кстати а еще кто нить может быть пожскажет, у меня при вставке картинки, картинка помещается ниже текста текстовое поле увеличится по горизонтали на высоту картинки, а так же зачем то по горизонтали ... то же на ширину картинки...
вот :(

sterh 23.12.2008 18:38

Цитата:

Сообщение от klafuda_klalafu (Сообщение 785823)
картинка помещается ниже текста текстовое поле увеличится по горизонтали на высоту картинки, а так же зачем то по горизонтали ... то же на ширину картинки...
вот :(

ничего не понял :wacko:

Попробуй Event.CHANGE или Event.RENDER

у меня была похожая пробла со вставкой картинок в TextField. Я решил отказаться от использования TextField и написал что-то типа мини браузера.

Вот класс, который парсит XML (можно подтачить его под HTML)
Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.geom.*;
        import flash.filters.*;
        import flash.text.*;
        import flash.net.*;
        import flash.text.TextField;
        import flash.events.TextEvent;
        import flash.system.fscommand;
 
        public class Page extends Sprite
        {
                var pageXMLURL:URLRequest;
                var pageXML:XML;
                var pageXMLLoader:URLLoader = new URLLoader();
 
                var Items:Array;
 
                var Parent:SScrollPane;
 
                var pStyleSheet:StyleSheet = new StyleSheet();
                var divStyleSheet:StyleSheet = new StyleSheet();
 
 
                public function Page(path, _Parent):void
                {
                        Parent = _Parent;
                        pageXMLURL = new URLRequest("xml/"+path);
                        pageXMLLoader.load(pageXMLURL);
                        pageXMLLoader.addEventListener(Event.COMPLETE, _loadCompleteHandler);
                        pStyleSheet.parseCSS("a {text-decoration: underline; color: #321d02;} a:hover {color: #870505;}");
                        divStyleSheet.parseCSS("a {color: #321d02;} a:hover {color: #870505;}");
                }
                private function _loadCompleteHandler(event:Event):void
                {
 
                        pageXML = new XML(pageXMLLoader.data);
                        pageXML.ignoreWhitespace = true;
                        parcePageXML();
                }
                private function parcePageXML():void
                {
                        while(this.numChildren>0)
                        {
                                this.removeChildAt(0);
                        }
                        Items = new Array();
                        var blocks:XMLList = pageXML.children();
                        var block:XML;
                        for each(block in blocks)
                        {
                                var tagName:String = block.name();
                                switch(tagName)
                                {
                                        case "divs":
                                                var divsMc:Sprite = new Sprite();
                                                var divs:XMLList = block.children();
                                                var div:XML;
                                                var tempWidth:Number = 0;
                                                var tempY:Number = 0;
                                                for each(div in divs)
                                                {
                                                        var tempDiv:TextField = addDiv(div);
                                                        if(tempWidth+tempDiv.width+20 > Parent.ContWidth-40)
                                                        {
                                                                tempWidth = 0;
                                                                tempY = divsMc.height+20;
                                                        }
                                                        tempDiv.y = tempY;
                                                        tempDiv.x = tempWidth;
                                                        tempWidth += tempDiv.width+20;
                                                        divsMc.addChild(tempDiv);
                                                }
                                                if(Items.length == 0)
                                                {
                                                        divsMc.y = 0;
                                                }
                                                else
                                                {
                                                        divsMc.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                                                }
                                                var divsMcId:uint = Items.push(divsMc);
                                                this.addChild(Items[divsMcId-1]);
                                        break;
                                        case "p":
                                                addP(block);
                                        break;
 
                                        case "h1":
                                                var h1tf:TextFormat = new TextFormat();
                                                h1tf.size = 24;
                                                h1tf.bold = false;
                                                h1tf.color = 0x321d02;
                                                //if(block.attribute("align") == "center")
                                                //{
                                                        h1tf.align = TextFormatAlign.CENTER;
                                                //}
                                                var h1temp:TextField = new TextField();
                                                h1temp.defaultTextFormat = h1tf;
                                                h1temp.width = Parent.ContWidth-40;
                                                h1temp.wordWrap = true;
                                                h1temp.text = block.toString();
                                                h1temp.multiline = true;
                                                h1temp.autoSize = TextFieldAutoSize.LEFT;
                                                if(Items.length == 0)
                                                {
                                                        h1temp.y = 0;
                                                }
                                                else
                                                {
                                                        h1temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                                                }
                                                var th1Id:uint = Items.push(h1temp);
                                                this.addChild(Items[th1Id-1]);
                                        break;
                                        case "h2":
                                                var h2tf:TextFormat = new TextFormat();
                                                h2tf.size = 16;
                                                h2tf.bold = true;
                                                h2tf.color = 0x321d02;
                                                var h2temp:TextField = new TextField();
                                                h2temp.defaultTextFormat = h2tf;
                                                h2temp.width = Parent.ContWidth-40;
                                                h2temp.wordWrap = true;
                                                h2temp.text = block.toString();
                                                h2temp.multiline = true;
                                                h2temp.autoSize = TextFieldAutoSize.LEFT;
                                                if(Items.length == 0)
                                                {
                                                        h2temp.y = 0;
                                                }
                                                else
                                                {
                                                        h2temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                                                }
                                                var th2Id:uint = Items.push(h2temp);
                                                this.addChild(Items[th2Id-1]);
                                        break;
                                        case "image":
                                                var img:Image = new Image(block.attribute("src"), block.attribute("href"), block.attribute("big"), block.attribute("width"), block.attribute("height"));
                                                if(Items.length == 0)
                                                {
                                                        img.y = 0;
                                                }
                                                else
                                                {
                                                        img.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                                                }
                                                //if(block.attribute("align") == "center")
                                                //{
                                                        img.x = (Parent.ContWidth-40)/2-img.width/2;
                                                //}
                                                var timgId:uint = Items.push(img);
                                                this.addChild(Items[timgId-1]);
                                        break;
                                        case "title":
                                                var cc:ContentContainer;
                                                cc = Parent.Parent;
                                                cc.Title.text = block.toString();
                                        break;
                                }
                                Parent.ssb.render(Parent.Height);
                        }
                }
                public function render():void
                {
                        parcePageXML();
                }
                private function _linkHandler(event:TextEvent):void
                {
                        if (event.text.search("@")>-1)
                        {
                                trace(event.text);
                                navigateToURL(new URLRequest("mailto:"+event.text));
                                return;
                        }
                        if (event.text.search("f_")>-1)
                        {
                                var temp_txt = event.text.replace("f_","");
                                fscommand("exec", temp_txt);
                                trace(temp_txt);
                                return;
                        }
                        trace("link!"+event.text);
                        Parent.addPage(event.text);
 
                }
                public function addP(block):void
                {
                        var tf:TextFormat = new TextFormat();
                        tf.size = 17;
                        tf.font = "Arial";
                        tf.color = 0x321d02;
                        tf.align = TextFormatAlign.JUSTIFY;
 
                        var temp:TextField = new TextField();
                        temp.addEventListener(TextEvent.LINK, _linkHandler);
                        temp.defaultTextFormat = tf;
                        temp.width = Parent.ContWidth-40;
                        temp.wordWrap = true;
                        temp.styleSheet = pStyleSheet;
                        var tempStr:String = new String(block.toString());
                        tempStr = transformTextP(tempStr);
                        temp.htmlText = tempStr;
                        temp.multiline = true;
                        temp.autoSize = TextFieldAutoSize.LEFT;
                        if(Items.length == 0)
                        {
                                temp.y = 0;
                        }
                        else
                        {
                                temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                        }
                        var tId:uint = Items.push(temp);
                        this.addChild(Items[tId-1]);
                }
                public function addDiv(block):TextField
                {
                        var tf:TextFormat = new TextFormat();
                        tf.size = 14;
                        tf.font = "Arial";
                        tf.color = 0x321d02;
 
                        var temp:TextField = new TextField();
                        temp.addEventListener(TextEvent.LINK, _linkHandler);
                        temp.defaultTextFormat = tf;
                        //temp.width = Parent.ContWidth-40;
                        temp.wordWrap = true;
                        temp.styleSheet = divStyleSheet;
                        var tempStr:String = new String(block.toString());
                        tempStr = transformTextP(tempStr);
                        temp.htmlText = tempStr;
                        temp.multiline = true;
                        temp.autoSize = TextFieldAutoSize.LEFT;
                        temp.wordWrap = false;
                        return temp;
                        /*if(Items.length == 0)
                        {
                                temp.y = 0;
                        }
                        else
                        {
                                temp.y = Items[Items.length-1].y+Items[Items.length-1].height+4;
                        }
                        var tId:uint = Items.push(temp);
                        this.addChild(Items[tId-1]);*/

                }
                private function transformTextP(tempStr):String
                {
                        while(tempStr.search("\n")>=0)
                        {
                                tempStr = tempStr.replace("\n","");
                        }
                        while(tempStr.search("  ")>=0)
                        {
                                tempStr = tempStr.replace("  "," ");
                        }
                        tempStr = tempStr.replace("> ",">");
                        while(tempStr.search("> ,")>=0)
                        {
                                tempStr = tempStr.replace("> ,",">,");
                                trace("SUKAAAAA!");
                        }
                        while(tempStr.search("> <")>=0)
                        {
                                tempStr = tempStr.replace("> <","><");
                        }
                        while(tempStr.search("<br/> ")>=0)
                        {
                                tempStr = tempStr.replace("<br/> ","\n");
                        }
                        while(tempStr.search("<br/>")>=0)
                        {
                                tempStr = tempStr.replace("<br/>","\n");
                        }
                        while(tempStr.search("<tab /> ")>=0)
                        {
                                tempStr = tempStr.replace("<tab /> ","\t");
                        }
                        while(tempStr.search("\"> ")>=0)
                        {
                                tempStr = tempStr.replace("\"> ","\">");
                        }
                        while(tempStr.search("« <")>=0)
                        {
                                tempStr = tempStr.replace("« <","«<");
                        }
                        while(tempStr.search("> »")>=0)
                        {
                                tempStr = tempStr.replace("> »",">»");
                        }
                        return tempStr;
                }
        }
}


klafuda_klalafu 23.12.2008 18:56

а можно поподробнее про Event.CHANGE

Добавлено через 2 минуты
2 sterh
когда с помощью html тега <img> вставляю картинку, то границы текстового поля увеличиваются на ширину и на высоту картинки...


Часовой пояс GMT +4, время: 12:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.