![]() |
|
||||||||||
|
|||||
|
[+4 15.11.07]
|
Есть 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();
}
и проверку event.eventPhase. Я знаю что есть какой-то более элегантный способ, но через поиск не могу найти. |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Вам наверное поможет это:
http://flasher.ru/forum/showpost.php...7&postcount=66 http://flasher.ru/forum/showpost.php...2&postcount=67 |
|
|||||
|
[+4 15.11.07]
|
Цитата:
Пробовал также забрать mouseChildren=false у Tooltip'а, и для всех контролов кроме кнопки закрытия поставить mouseEnabled=false - тогда возвращаются все глюки какие были раньше. |
|
|||||
|
Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
|
Цитата:
Если не хочется заморачиваться со множеством событий, проще всего на Over запускать таймер, который будет проверять наличие объекта под мышкой (через hitTestPoint() например), и прятать его, если мышь ушла. Тут даже можно сделать такую удобную фичу: прятать не сразу, например, а через пару "тиков". Тогда если пользователь вышел за пределы объекта случайно и быстро вернулся - объект не прячется. Так многие виндовые менюшки сделаны. ![]()
__________________
Верить никому нельзя. Мне - можно. :) |
|
|||||
|
[+4 15.11.07]
|
Спасибо, попробую.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|