Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Дата: Ср, 07 Сентября 2011, 00:16 | Сообщение # 91
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Alien)
почти у каждого объекта есть события входа и выхода мыши, вот его можно использовать для определения над каким объектом мышь находится.
Я так и делаю в своем проекте "Корпоративная культура", и там столкнулся с проблемой, что NB не всегда обновляет переменные изменение которых прописано на события "мышь вошла" и "мышь вышла". А конкретно, я использую там объекты Text для создания "вкладок". Одиночный клик по вкладке должен ее открывать, так вот не всегда удается вкладку открыть, именно по той причине, что эти события в объекте Text не всегда успевают обработаться. Не знаю почему, может из-за большого числа объектов...
Quote (Peter)
Для одного объекта НЕВОЗМОЖНО назначить одновременно реакцию на просто клик и на двойной клик
Quote (Сергей)
нельзя повесить оба события одновременно.
Quote (Гарик)
можно будет отлавливать левый дабл,средний дабл и правый дабл над любым контролом,не зависимо какие у него есть события, или их вообще нет(например Rectangle). Точно так же можно ловить и одинарный клик (левый,средний,правый)над любым контролом. Но в совокупности не прокатит.
Мне кажется и для одного объекта оба события можно повесить. Вы, по всей видимости говорите о каких-то стандартных событиях, я же говорю об их имитации. Либо я не понимаю что-то. Попробую пояснить как я это вижу, если не прав - поправите.
Допустим на объект Text1 я пытаюсь повесить оба события - и одинарный левый, и двойной левый клики. Допустим по первому клику у меня объект "выделяется" (меняю ему просто заливку), а по двойному что-то там делается. Кликнули один раз, плагин узнаёт над каким объектом курсор и запускает подпрограмму (в данном случае - изменения заливки), кликнули второй раз и если этот второй раз оказался в границах времени отведенного на двойной клик, то плагин запустит вторую подпрограмму. Как плагин узнает, что это уже второй клик, а не первый? С помощью внутреннего таймера, как в примере Петра выше, а период ожидания может взять из реестра или ручных настроек. Т.е. не собственно двойной клик мониторится, а мониторится, выходит, всегда одинарный, но если одинарные оказываются в пределах назначенного допуска, то истолковываются они как двойной, точнее второй одинарный истолковывается как двойной.
Одинарный всегда истолковывается как одинарный, а вот второй одинарный - по-разному. На случай, если первый одинарный предназначен не для вспомогательной роли (как например функция "выделения" объекта), а имеет самостоятельный код, то можно добавить более сложную подпрограмму или даже опциональную задержку выполнения подпрограммы (до проверки того будет ли следующий одинарный клик произведен в границах допуска, т.е. в роли второй части двойного клика).
Резюме. Плагин должен мониторить то над каким объектом совершен одинарный клик и как далеко он был отнесен во времени от предшествующего клика, и если в пределах указанных границ, то должен второй одинарный клик понимать как двойной клик и запускать соответствующую подпрограмму. По этой логике можно сделать и тройной клик и "девятирной", если кому приспичит, смысл не меняется.