|
|
|||||
[+4 15.11.07]
|
Проблема с 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(); } и проверку 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, время: 01:15. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|