Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.06.2007, 18:33
makanmel вне форума Посмотреть профиль Отправить личное сообщение для makanmel Найти все сообщения от makanmel
  № 1  
Ответить с цитированием
makanmel
[+4 15.11.07]
 
Аватар для makanmel

Регистрация: Dec 2006
Адрес: Lviv
Сообщений: 34
Отправить сообщение для makanmel с помощью ICQ Отправить сообщение для makanmel с помощью Skype™
По умолчанию Проблема с MouseEvents

Есть Canvas с разными контролами (Button, Label, TextArea), который является Tooltip'ом (или Hint'ом) появляющимся при наведении мышки на кнопку.

Нужно, чтобы после наведения (MouseOver), а потом убирания мышки с него (MouseOut) он прятался, а если был клик на нем, то оставался.

Проблема в том, что событие MouseOut возникает при передвижении мышки на другие контролы в пределах Canvas'а (кнопку или текстовое поле), а не только когда мы уберем мышку с самого Canvas'а.

Код:
<?xml version="1.0" encoding="utf-8"?>
<RSSTooltipBase
	xmlns="controls.*"
	xmlns:mx="http://www.adobe.com/2006/mxml"
	width="{INITIAL_WIDTH}"
	height="{INITIAL_HEIGHT}"
	borderStyle="solid"
	borderColor="#0000FF"
	backgroundColor="#FFFFEE"
	cornerRadius="8">
	<mx:Label
		id="titleLabel"
		text="{title}"
		textAlign="center"
		width="{INITIAL_WIDTH - 20}"
		fontSize="12"
		fontWeight="bold"
		left="0"
		top="0"
		mouseOut="event.stopPropagation();"/>
	<mx:Button
		label="x"
		width="16"
		height="16"
		right="2"
		top="2"
		cornerRadius="8"
		click="onCloseClick(event);"
		mouseOut="event.stopPropagation();"/>
	<mx:TextArea
		id="rssField"
		htmlText="{description}"
		width="{INITIAL_WIDTH - 8}"
		height="{INITIAL_HEIGHT - 42}"
		bottom="21"
		backgroundColor="#FFFFEE"
		horizontalCenter="0"
		borderStyle="none"
		horizontalScrollPolicy="off"
		editable="false"
		mouseOut="event.stopPropagation();"/>
	<mx:TextArea
		id="linkLabel"
		htmlText="{link}"
		textAlign="center"
		backgroundColor="#FFFFEE"
		color="#000088"
		borderStyle="none"
		horizontalCenter="0"
		width="{INITIAL_WIDTH - 20}"
		height="20"
		editable="false"
		left="0"
		bottom="0"
		mouseOut="event.stopPropagation();"/>
</RSSTooltipBase>
Код:
public function RSSTooltipBase()
{
	super();
	addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
}

public function close() : void
{
	dispatchEvent(new TooltipWindowEvent(TooltipWindowEvent.CLOSE_TOOLTIP));
}

public function onCloseClick(event : MouseEvent) : void
{
	close();
}

public function onMouseOver(event: MouseEvent) : void
{
	dispatchEvent(new TooltipWindowEvent(TooltipWindowEvent.STOP_CLOSE_TIMER));
	removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
	addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
	addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}

public function onMouseDown(event: MouseEvent) : void
{
	removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
	removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}

public function onMouseOut(event: MouseEvent) : void
{
	if (event.eventPhase != 3) close();
}
Пришлось пока написать на всех контролах mouseOut="event.stopPropagation();"

и проверку event.eventPhase.

Я знаю что есть какой-то более элегантный способ, но через поиск не могу найти.

Старый 03.06.2007, 19:47
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 2  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
Вам наверное поможет это:
http://flasher.ru/forum/showpost.php...7&postcount=66
http://flasher.ru/forum/showpost.php...2&postcount=67
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 04.06.2007, 14:05
makanmel вне форума Посмотреть профиль Отправить личное сообщение для makanmel Найти все сообщения от makanmel
  № 3  
Ответить с цитированием
makanmel
[+4 15.11.07]
 
Аватар для makanmel

Регистрация: Dec 2006
Адрес: Lviv
Сообщений: 34
Отправить сообщение для makanmel с помощью ICQ Отправить сообщение для makanmel с помощью Skype™
Цитата:
Сообщение от MerlinTwi
Добавил mouseChildren=false для Tooltip'а, теперь все отлично, кроме того, что я не могу нажать кнопку закрытия на Tooltip'е. Пробовал отдельно для этой кнопки устанавливать mouseEnabled=true - ничего не меняется.

Пробовал также забрать mouseChildren=false у Tooltip'а, и для всех контролов кроме кнопки закрытия поставить mouseEnabled=false - тогда возвращаются все глюки какие были раньше.

Старый 04.06.2007, 21:09
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 4  
Ответить с цитированием
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
Цитата:
Сообщение от makanmel
Добавил mouseChildren=false для Tooltip'а, теперь все отлично, кроме того, что я не могу нажать кнопку закрытия на Tooltip'е. Пробовал отдельно для этой кнопки устанавливать mouseEnabled=true - ничего не меняется.

Пробовал также забрать mouseChildren=false у Tooltip'а, и для всех контролов кроме кнопки закрытия поставить mouseEnabled=false - тогда возвращаются все глюки какие были раньше.
Всё правильно. Эти свойства меняют чувствительность к мыши - не поможет, т.к. чувствительность мыши должна оставиться на всех активных объектах.

Если не хочется заморачиваться со множеством событий, проще всего на Over запускать таймер, который будет проверять наличие объекта под мышкой (через hitTestPoint() например), и прятать его, если мышь ушла. Тут даже можно сделать такую удобную фичу: прятать не сразу, например, а через пару "тиков". Тогда если пользователь вышел за пределы объекта случайно и быстро вернулся - объект не прячется. Так многие виндовые менюшки сделаны.
__________________
Верить никому нельзя. Мне - можно. :)

Старый 04.06.2007, 21:33
makanmel вне форума Посмотреть профиль Отправить личное сообщение для makanmel Найти все сообщения от makanmel
  № 5  
Ответить с цитированием
makanmel
[+4 15.11.07]
 
Аватар для makanmel

Регистрация: Dec 2006
Адрес: Lviv
Сообщений: 34
Отправить сообщение для makanmel с помощью ICQ Отправить сообщение для makanmel с помощью Skype™
Спасибо, попробую.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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