Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Компонент List v2. Убить обводку (http://www.flasher.ru/forum/showthread.php?t=124972)

incorp 13.05.2009 18:31

Компонент List v2. Убить обводку
 
создается swf с компонентой List и ее стилями и подгружается в другую. при нажатии на элементы списка в первой флешке не видна обводка вокруг компоненты, а во второй видна. Очень хочется чтобы ее вобще не было. пытался обратится к мувикам из которых состоит компонент и убивать их - почему то не получается. Вероятно потому что обращение идет из класса? обращался примерно так: userlist["boundingBox_mс"](я предпологаю что именно этот мувик - обводка) далее пробовал убить визабилити, альфу, унлоадить или ремувнуть - результат одинаковый. отключаю селектейбл - получаю нужный результат, но пропадает отклик на событие чендж. есть предположения у товарищей знатоков?

KiL33 13.05.2009 20:42

Цитата:

Компонент List v2. Убить обводку
Она бессмертна..(

silin 13.05.2009 22:58

думаю происходит следующее:
при отрисовке всех этих рамок компонент ищет в _level0 focusManager
в исходной флешке он находит его там - все нормально
но когда флешка с компонентом подгружена в другую, то найти _level0.focusManager ему уже не судьба - все сбивается
если в принимающую флешку вкомпилить этот функционал (достаточно положить в библиотеку любой компонент), то все заработает как закажешь

incorp 14.05.2009 12:36

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

silin 14.05.2009 15:24

Код AS1/AS2:

focusManager.enabled=false;

не проверял, но предполагаю, что нужно в обоих флешках

incorp 14.05.2009 15:56

я тоже предполагал этот вариант - нет, рамка бессмертна. внутри класса вложеной флешки создается к тому же собственный фокус манагер - но его я тоже сразу по создании, enabled=false; вот такие фокусы фокус манагера. еще один ньюанс, которому я тоже не нашел объяснения - оказывается даже вложеная флешка отлично работает без всяких рамочек, до тех пор пока не используется видоизмененный хинт (конечно ваш, чей же еще:)) на всякий случай выложу тот вариант хинта что юзается у нас. логики в этом я не вижу. закоменчиваем строку body=_root.createEmptyMovieClip("hint",0xFFFFE); пропадают хинты, зато никаких рамочек.
Код AS1/AS2:

class Hint {
        private static var body:MovieClip;
        public static var intervalID:Number;
        private static var tf:TextField;       
 
        static var hintTextFormat:TextFormat = new TextFormat("_sans", 11, 0xffffff);
        static var DELAY_OFF:Number=3000;
        static var DELAY_ON:Number=100;
        static var bgColor:Number=0x000000; //0x3F4043;
        static var bgAlpha:Number=80;
        static var bgRound:Number=10;
        static var lineWidth:Number=0;
        static var lineColor:Number=0x646567;       
        static var lineAlpha:Number=null;//70;
        static var topPadding:Number=0;
        static var leftPadding:Number=5;
        static var dragEnable:Boolean;
 
        static function show(s:String,timeOut:Number,dragable:Boolean):Void {
                if(!s){
                        clear();
                        return;
                }
                dragEnable=dragable;
                body.removeMovieClip();
                clearInterval(intervalID);
                intervalID=setInterval(Delegate.create(Hint,create),DELAY_ON,s,timeOut,dragable);
        }
 
 
        static function create(s:String):Void{
 
                body=_root.createEmptyMovieClip("hint",0xFFFFE);
                body.filters=[new DropShadowFilter(2,45,0,0.2)];
                body.onEnterFrame=null;
                body.clear();
                body._txt.removeTextField();
                tf=body.createTextField("_txt",0,leftPadding,topPadding,0,0);
                tf.text=s;
                tf.setTextFormat(hintTextFormat);
                tf.autoSize=true;
                tf.selectable=false;
                //tf.border=true;
                // tf.borderColor=frameColor;
                var w=body._width, h=body._height;
 
                RectDraw.drawRounded(body,  w+leftPadding*2, h+topPadding*2, 5, bgColor, bgAlpha, lineWidth, lineColor, lineAlpha);
 
                var m=_root._xmouse+body._width +10> Stage.width;
                body._x=int(_root._xmouse+(m?-body._width-5:10));
                body._y=_root._ymouse-10;
 
                clearInterval(intervalID);
                intervalID=setInterval(Delegate.create(Hint,clear),DELAY_OFF);
                body.onMouseMove=Delegate.create(Hint,drag);
 
                body._alpha=100;
        }
 
        static function drag():Void        {
                body._alpha-=1;
                //trace(body._alpha);
                if(!dragEnable&&body._alpha<90){
                        body.removeMovieClip();
                }
                //body._y=int(_root._ymouse-10);
                //var m=_root._xmouse+body._width +10> Stage.width;
                //body._x=int(_root._xmouse+(m?-body._width-5:10));
        }
 
        static function clear(smooth:Boolean):Void{
                clearInterval(intervalID);
                if(smooth){
                        body.onEnterFrame=Delegate.create(Hint,fade);
                }else{
                        body.removeMovieClip();
                }
        }
 
        static private function fade(){
                body._alpha-=50;
                if(body._alpha<=0){
                        body.removeMovieClip();
                }
        }
 
}


silin 14.05.2009 16:56

так это в ту же тему, имхо
focusManager акурат на глубине 1048574 (0xFFFFE) и создается, создавая там же болванку для хинтов, убиваем focusManager со всему вытекающими последствиями, т.е. нормальная работа всех этих компонентовских приблуд уже невозможна..
создавай хинт на 0xFFFFB и все будет работать

при подгрузке немного по другому, но с тем же результатом, компонент просто не может создать focusManager (не из чего), если в библиотеку положить какой-нбудь компонент, то все будет штатно.., скорее всего, может быть :)

зы: а лучше забыть эти компоненты v2 как страшный сон и работать в AS3 :)

ззы по поводу focusManager.enabled=false; - в флешке с самим компонентом, если она полгружается, это ничего не дает - focusManager создается в _level0 плеера, т.е. в руте загружающей флешки это и надо писать

incorp 14.05.2009 17:24

спасибо большое:) ура! заработало, теперь все стало ясно. вот на такие мелочи и тратится больше всего времени. если бы начальство решилось переделывать исходники на ас3 я бы руками и ногами был за. Еще раз спасибо.


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

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