Показать сообщение отдельно
Старый 28.07.2010, 22:26
drnet_ua вне форума Посмотреть профиль Отправить личное сообщение для drnet_ua Найти все сообщения от drnet_ua
  № 2  
Ответить с цитированием
drnet_ua
 
Аватар для drnet_ua

Регистрация: Jul 2010
Адрес: 50° 27′ 0″ N, 30° 30′ 0″ E
Сообщений: 256
Записей в блоге: 2
это текст на подсказке

специально изваял пример(на haXe правда)
если изменить строчку
Код AS3:
static var textFieldActive:Bool = false;
будут те-же грабли

// доработать напильником и чудный компонент получится

походу вопрос - как избавится от вызова MouseOut при hint.visible = false?

Код AS3:
package ;
package ;
 
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.Lib;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.Vector;
import haxe.Timer;
 
/**
 * ...
 * @author toxa
 */
 
class Main 
{
	static var hintDelay:UInt = 2000;
	static var textFieldActive:Bool = false;
 
	private var hintAlphaChange:Float;
 
	private var stage:MovieClip;
	private var button:Sprite;
	private var hint:Sprite;
	private var timer:Timer;
 
// рисование	
 
	private function crateBoxWithText(color:UInt, text:String, dst:Sprite, baloon:Bool) {
 
		var textField = new TextField();
		textField.text = text;
		textField.autoSize = TextFieldAutoSize.CENTER;
		textField.mouseEnabled = textFieldActive;
		var width = textField.width +20;
		var height = textField.height + 10;
 
		dst.graphics.beginFill(color);
		dst.graphics.drawRoundRect( -width / 2, -height / 2, width, height, 10);
		dst.graphics.endFill();
 
		if (baloon) {
			dst.graphics.beginFill(color);
			dst.graphics.moveTo(width / 2, 0);
			dst.graphics.lineTo(width / 2, height / 2 + 20);
			dst.graphics.lineTo(width / 2 - 20, 0);
			dst.graphics.endFill();
		}				
		dst.addChild(textField);
 
		textField.x = -textField.width / 2;
		textField.y = -textField.height / 2;	
	}
 
	private function drawButton() {
		button = new Sprite();
		stage.addChild(button);
		crateBoxWithText(0xeeeeee, 'Simple Button', button, false);
		button.y = (stage.stage.stageWidth - button.width) / 2;
		button.x = (stage.stage.stageWidth - button.height) / 2;
		}
 
 
	private function drawHint() {
		hint = new Sprite();
		stage.addChild(hint);
		crateBoxWithText(0xffcc00, 'You clicked Simple Button - here is a hint!', hint, true);
		hint.y = button.y-50;
		hint.x = button.x - hint.width / 2;
		hint.visible = false;
	}
 
// управление таймером
 
	private function startTimer() {
		if (hint.visible == true) {
		trace('Таймер включен');
		timer = new Timer(hintDelay);
		timer.run = timerRun; } 
		else {
			trace('Подсказка не активна, таймер включать не надо');
		}
	}
 
	private function stopTimer() {
		trace('Таймер выключен');
		timer.stop();
	}
 
	private function timerRun () {
		trace('Время вышло - выключаем таймер, прячем подсказку');
		hideHint();
		stopTimer();
	}
 
 
// управление подсказкой
 
	private function animateHint(e:Event) {
		hint.alpha += hintAlphaChange;
 
		if ((hint.alpha > 0.99) && (hintAlphaChange>0)) {
			hint.alpha = 1;
			hint.removeEventListener(Event.ENTER_FRAME, animateHint);
		}
 
		if ((hint.alpha < 0.01) && (hintAlphaChange<0)) {
			hint.alpha = 0.1;
			hint.removeEventListener(Event.ENTER_FRAME, animateHint);
			hint.visible = false;
		}
	}
 
	private function showHint() {
		trace('Покажем подсказку');
		hint.visible = true;
		hintAlphaChange = 0.1;
		hint.addEventListener(Event.ENTER_FRAME, animateHint);
		hint.addEventListener(MouseEvent.MOUSE_OVER, hintMouseOver);
		hint.addEventListener(MouseEvent.MOUSE_OUT, hintMouseOut);		
		hint.addEventListener(MouseEvent.MOUSE_UP, hintMouseUp);
	}
 
	private function hideHint() {
		trace('Прячем подсказку');
		hint.removeEventListener(MouseEvent.MOUSE_OVER, hintMouseOver);
		hint.removeEventListener(MouseEvent.MOUSE_OUT, hintMouseOver);
		hint.removeEventListener(MouseEvent.MOUSE_UP, hintMouseUp);
		hintAlphaChange = -0.1;
		hint.addEventListener(Event.ENTER_FRAME, animateHint);
	}
 
// события кнопки	
 
	private function buttonMouseOver(e:Event) {
		trace('button.rollOver - покажем подсказку, таймер выключен');
		showHint();
		stopTimer();		
	}
 
	private function buttonMouseOut(e:Event) {
 
		if (hint.visible == true) {
			trace('button.MouseOut - включаем таймер');					
			startTimer();
		} else {
			trace('button.MouseOut - рудимент :), ничего не делаем');				
		}
	}
 
// события подсказки
 
	private function hintMouseOver(e:Event) {
		trace('hint.MouseOver - выключаем таймер');
		stopTimer();		
	}
 
	private function hintMouseOut(e:Event) {
		trace('hint.MouseOut - включаем таймер');				
		startTimer();
	}
 
	private function hintMouseUp(e:Event) {	
		trace('hint.MouseUp - прячем подсказку, выключаем таймер');
		hideHint();
		stopTimer();
	}
 
	public function new() {
		stage = Lib.current;
		drawButton();
		button.buttonMode = true;
		drawHint();
		hint.buttonMode = true;
 
		timer = new Timer(hintDelay);						
 
		hint.alpha = 0.1;
		button.addEventListener(MouseEvent.MOUSE_OVER, buttonMouseOver);
		button.addEventListener(MouseEvent.MOUSE_OUT, buttonMouseOut);		
	}
 
 
	static function main() 
	{
	new Main();	
	}
 
}