Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   hitTest выпадающей части ComboBox (http://www.flasher.ru/forum/showthread.php?t=143394)

adsl66 15.08.2010 18:58

hitTest выпадающей части ComboBox
 
Здравствуйте!
Как заставить выпадающую часть ComboBoxа реагировать на hitTest?
Вот для примера.
Код AS1/AS2:

onMouseDown = function ():Void {
        if (cbx.hitTest(_root._xmouse, _root._ymouse, true)) {
                trace("Попал");
        } else {
                trace("Мимо");
        }
};


mooncar 15.08.2010 20:21

В принципе у комбобокса внутри есть некий мувик boundingBox_mc, вероятно как-то связанный с его границей.
Код AS1/AS2:

for (i in cbx) 
{
        trace(i + '  ' + cbx[i]);
}

Но можно ли с ним работать - неизвестно, хиттест на него не срабатывает.

Решение только такое придумывается - проверять hitTest на область, ограниченную cbx._width и cbx._height - эти свойства вроде бы правильно отображают видимые размеры комбобокса при работе с ним.

adsl66 15.08.2010 22:08

Код AS1/AS2:

onMouseDown = function () {
        trace(cbx._height);
};

Да действительно показывает изменение в высоте, но только на открытие ComboBoxа. После его сворачивания показывает ту же высоту что и в развёрнутом состоянии.
Или я что-то не понимаю?

mooncar 15.08.2010 22:51

Да, поторопился я сказать по поводу "правильно отображают"...
Действительно, значение cbx._height после открытия комбобокса остается фиксированным, видимо, максимальным.
Даже если обернуть комбобокс в мувик и использовать высоту последнего, она также после открытия остается той же самой.
Идей больше нет.
Разе что свой комбобокс создать, с предсказуемыми свойствами.

adsl66 15.08.2010 23:49

Тогда может быть мой частный случай можно решить другим путём.
Вверху карты города, которая масштабируется колёсиком и перемещается нажатой левой кнопкой мышки присутствует список улиц в ComboBoxе. И вот когда список разворачивается, любые манипуляции с ползунком списка передаются также и на карту. Переставить список так чтоб он не пересекался с картой некуда.
Кроме hitTestа пробовал в условиях масштабирования и перемещения отслеживать высоту ComboBoxа, но тогда после сворачивания списка из за того что высота не возвращается масштабирование и перемещение перестаёт работать.
Пробовал ComboBoxу по клику подложить под выпадающую часть какой нибудь клип и потом отслеживать его. Но тогда список перестаёт разворачиваться, не помогает даже если назначить это событие родительскому клипу.

Заранее огромное спасибо всем кто откликнется.

rainbowrussia 16.08.2010 01:40

Как вариант... периодически отрисовывать список в битмапдату и проверять через getPixel в определенной позиции цвет, где список выпадает. Если цвет не белый - список выпал - блокировать карту.

mooncar 16.08.2010 01:55

С битмапой - это как-то не по-человечески. Давайте-ка танцевать "от печки" и рассматривать событийную модель.

Автор, вам надо, чтобы если юзер начать использовать комбобокс, функции для работы с картой не работали.
И когда юзер закрывал бы комбобокс, эти функции опять бы включались.

Открываем хелп, видим, что у комбобокса есть подходящие события:
ComboBox.open (Broadcast when the drop-down list begins to open.) и СomboBox.close (Broadcast when the list of the combo box begins to retract.)

Назначим на их обработку функции, которые бы переводили бы некий разрешающий триггер на false (когда происходит ComboBox.open) и на true (для СomboBox.close).

Останется в функциях для управления картой ввести проверку на этот триггер.
Если он будет в состоянии false, функция управления картой не будет выполнять свои действия.

mooncar 16.08.2010 02:23

Вложений: 1
Вот пример.
На карте используем колесико для изменения масштаба.
Как только открываем комбобокс, карта перестает реагировать на колесико.
Закрываем - карта опять реагирует на колесико.

adsl66 16.08.2010 17:10

По приведённому примеру сделал изменения. Всё работает отлично.
Огромное спасибо.


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

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