Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Hints всплывающие подсказки (http://www.flasher.ru/forum/showthread.php?t=126971)

kup 01.07.2009 19:21

Hints всплывающие подсказки
 
Хочу сделать всплывающие подсказки (hints). Задумка наследоватся от TextField() + Timer() + getTimer(). Задумался не изобретаю ли я велосипед, нет ли какого-нибудь MouseEvent.HOVER или чего-то подобного?
Как быть со шрифтами, embed-ить или использовать системный?
:)

willis83 01.07.2009 19:29

MouseEvent.HOVER точно нету. Придумывать надо с нуля и тут уже как душа развернётся, вообще классическая подсказка должна вылазить после примерно секундной задержки мышки над объектом, т.е. придётся по идее скидывать таймер на событии MouseEvent.MOVE, а после того как подсказка вылезет, по этому же событию убирать подсказку.
Я тоже думаю для одного из своих проектов прикрутить подсказки, но пока там и без этого работы хватает.

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

kup 01.07.2009 19:39

в догонку вопрос, а как позиционируется текст в TextField.

Код AS3:

hint.width = hint.textWidth;
hint.height = hint.textHeight;

Код работает не так, как хотелось бы.

Яски 01.07.2009 19:44

textField.autoSize установите

Добавлено через 57 секунд
Еще в TextFormat можно указать настройки выравнивания блока текста

kup 01.07.2009 19:52

Делаю так:

Код AS3:

hint.selectable = false;
hint.background = true;
hint.backgroundColor = 0xFFFFE2;
hint.border = true;
 
var format:TextFormat = new TextFormat();
format.font = "Arial";
format.align = TextFormatAlign.LEFT;
format.size = 11;
 
hint.defaultTextFormat = format;
 
hint.text = "Hello world!";
 
hint.width = hint.textWidth;
hint.height = hint.textHeight;

по ощущениям нехватает двух-трех пикселей, из за чего текст невлезает. Попробую autosize.

willis83 01.07.2009 19:56

а что вы собственно пытались сделать этим кодом? hint это текстовое поле?

kup 01.07.2009 20:05

да var hint:TextField. Пытаюсь вывести подсказку. Задаю текст, беру его размеры и задаю их текстфилду. Это тестовый пример я пытаюсь подобрать нужные размеры и параметры подсказок.

wvxvw 01.07.2009 20:53

Вот делал, вроде довольно просто:
http://code.google.com/p/e4xu/source...ws/gui/Hint.as

willis83 01.07.2009 21:50

Вложений: 1
я тоже тут сваргнанил на скорую руку

willis83 01.07.2009 21:57

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

Добавлено через 54 секунды
сорри за размер файла, с прошлых тестов в библиотеке остались компоненты, забыл удалить

kup 01.07.2009 22:15

Спасибо за отзывы и идеи. :)

willis83 01.07.2009 23:08

а вот если использоваться как супер класс для объектов с подсказками
Код AS3:

package { 
        import flash.display.Sprite;
        import flash.text.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.display.Graphics;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
 
        public class SpriteWithHint extends Sprite {
            var mysprite:Sprite = new Sprite();
                var myhint:Sprite = new Sprite();
                var hinttf:TextField = new TextField();
                public var hinttext:String = "There is hint";
                var hinttimer:Timer = new Timer(1000, 1);
 
                public function SpriteWithHint():void {
                        with(mysprite) {
                                graphics.lineStyle(1, 0x000000, 1);
                                graphics.beginFill(0x0033CC, 1);
                                graphics.drawRect(0, 0, 100, 40);
                                graphics.endFill();
                                x = 50;
                                y = 50;
                        };
                        mysprite.addEventListener(MouseEvent.MOUSE_OVER, hintPrepare);
                        mysprite.addEventListener(MouseEvent.MOUSE_OUT, hintCancel);
                        addChild(mysprite);
 
                        with(myhint) {
                                name = "myhint";
                                graphics.lineStyle(1, 0x000000, 1);
                                graphics.beginFill(0xFFFF33, 0.8);
                                graphics.moveTo(0,0);
                                graphics.lineTo(0,100);
                                graphics.lineTo(200,100);
                                graphics.lineTo(200,20);
                                graphics.lineTo(20,20);
                                graphics.lineTo(0,0);
                                graphics.endFill();
                                addChild(hinttf);
                        };
 
                        var myformat:TextFormat = new TextFormat();
                        with(myformat) {
                                color = 0x000000;
                                font = "Tahoma";
                                size = 12;
                        };
 
                        with(hinttf) {
                                selectable = false;
                                wordWrap = true;
                                x = 10;
                                y =30;
                                width = 100;
                                height = 160;
                                defaultTextFormat = myformat;
                        };
 
                };
 
                function hintPrepare(e:MouseEvent) {
                        mysprite.addEventListener(MouseEvent.MOUSE_MOVE, restartTimer);
                        hinttimer.addEventListener(TimerEvent.TIMER_COMPLETE, showHint);
                        hinttimer.start();
 
                };
 
                function restartTimer(e:MouseEvent) {
                        hinttimer.stop();
                        hinttimer.reset();
                        hinttimer.start();
                };
 
                function showHint(e:TimerEvent) {
                        mysprite.removeEventListener(MouseEvent.MOUSE_MOVE, restartTimer);
                        mysprite.addEventListener(MouseEvent.MOUSE_MOVE, hideHint);
                        addHint(hinttext);
                        hinttimer.stop();
                };
 
                function hideHint(e:MouseEvent) {
                        mysprite.removeEventListener(MouseEvent.MOUSE_MOVE, hideHint);
                        mysprite.addEventListener(MouseEvent.MOUSE_MOVE, restartTimer);
                        removeChild(myhint);
                        hinttimer.start();
                };
 
                function hintCancel(e:MouseEvent) {
                        hinttimer.removeEventListener(TimerEvent.TIMER_COMPLETE, showHint);
                        mysprite.removeEventListener(MouseEvent.MOUSE_MOVE, restartTimer);
                        hinttimer.stop();
                };
 
                function addHint(hinttxt:String) {
                        hinttf.text = hinttxt;
                        myhint.x = mouseX;
                        myhint.y = mouseY;
                        addChild(myhint);
                };
 
 
        };
};



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

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