Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Подскажите, плиз как сделать так, чтобы по двойному щелчку по рисунку левой кнолпкой мыши происходило одно действие, а по одинарному другое. Если это возможно без использования счетчика. Вик
Сообщение отредактировано wiksl - Пт, 02 Сентября 2011, 11:07
wiksl, можно сделать реакцию и на двойной и на тройной и т.д. клик. Временем старта таймера можем регулировать "скорость двойного щелчка".
Артём опередил :). Но выложу и свой пример, реализован - одинарный/двойной/тройной клик.
Quote (Alien)
самый извращенский способ наверное
А почему извращенский? Работает же, и гибко. Можно даже настраивать "чувствительность" к скорости кликов. Хотя, конечно же, проще было бы, если бы разрабы добавили в события вкладку Double Click...
Добавлено (02 Сентябрь 2011, 13:35) --------------------------------------------- wiksl, в моем примере только путь к своей картинке надо указать (в свойствах объекта Picture1).
Задержка и в винде есть, просто надо выбрать сходное время старта таймера и все дела. Я секунду выставил конечно с запасом... В винде скорость двойного щелчка тоже регулируется.
А возможен плаг, с помощью которого можно назначить событие Double Click для любого объекта? Чтобы и скорость двойного щелчка была глобальная - т.е. установленная в системе пользователя; либо (опционально) настраивалась локально в проекте. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Вадим, скорость щелчка, но не время после которого выполняются действия. В винде действия выполняется мгновенно после второго щелчка, а в нашем случае после второго щелчка идет ещё задержка, а потом выполнение действия.
Quote (Вадим)
А возможен плаг, с помощью которого можно назначить событие Double Click для любого объекта?
Есть принципиальные ограничения для реализации подобного плагина?
Я даже ни разу не пробовал манипулировать объектами в NB, но думаю что не получится. В принципе можно отлавливать глобальное событие, а там искать координаты по которым ты кликнул (по кнопке или нет)
Дата: Пт, 02 Сентября 2011, 15:11 | Сообщение # 10
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Гарик)
Тут скорей всего не выйдет, хотя...
Вот это "хотя..." звучит оптимистично! Не будем терять надежду .
Вообще говоря, если по-максимуму, то хорошо бы иметь плаг, который может навешивать все стандартные мышиные события (ну, хотя бы, просто три кнопки и двойной щелчок) на любой объект NB (на тот же Text, или TextEntry, например).
Я даже ни разу не пробовал манипулировать объектами в NB
Петр как-то говорил о том, что доступ к объектам пока не описан в SDK. Я тогда написал в неософт, что хорошо бы для плагиностроителей дать такой доступ к объектам. За предложение как всегда вежливо поблагодарили, но что реально сделано в этом направлении я не знаю. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Дата: Пт, 02 Сентября 2011, 16:00 | Сообщение # 15
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Alien)
Ну кликаешь на любую область программы два раза и выполняется событие. А координаты курсора уже определить в этом момент не составит труда.
В принципе, для простых проектов это было бы наверное подспорьем, а для проектов посложнее... Геморно, мне кажется.
Вот если бы можно было по двойному клику получать имя объекта по которому был такой клик и (опционально) выполнять подпрограмму, то это было бы уже круто. Тогда можно было бы использовать двойной клик на любом объекте, без вычисления его координат. DoubleClickNameObject "[dcnoNameObject]" "[dcnoNameSubroutineAction]" Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Сообщение отредактировано Вадим - Пт, 02 Сентября 2011, 16:14
Дата: Пт, 02 Сентября 2011, 16:43 | Сообщение # 18
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Quote (Alien)
задержка есть, причем в обоих случаях
Ну а как без задержки то? поставь меньше значение. Но можешь не успеть второй раз кликнуть. Я просто не пойму зачем таймер то нужен? Убери
If "[klik]" "=" "1" AlertBox "" "[klik]" EndIf
задержка меньше будет.
А если в
If "[klik]" ">" "1" AlertBox "" "[klik]" EndIf
Вставить код на пару страниц. Задержка еще больше получится. И вообще, вопрос так стоял
Quote (wiksl)
Подскажите, плиз как сделать так, чтобы по двойному щелчку по рисунку левой кнолпкой мыши происходило одно действие, а по одинарному другое. Если это возможно без использования счетчика.
Дата: Пт, 02 Сентября 2011, 16:52 | Сообщение # 20
Эксперт форума
Модераторы
Сообщений: 5942
Offline
wiksl, Для того что бы код срабатывал быстрее. Вместо AlertBox "" "[klik]" Надо назначить подпрограммы. GoSub "подпрограмма" , а не писать весь код. Тогда при условии читаться будет только по одной строчке, что заметно ускорит выполнение команд если код большой. Если условие верно, будет срабатывать своя подпрограмма для каждого условия. Не хочешь читать хелп?
Дата: Пт, 02 Сентября 2011, 19:17 | Сообщение # 22
Удаленные
mishem, без задержки? А ты в курсе что во время выполнения Delay приложение блокируется нафиг? Т.е. в этот момент прога будет подвисать.
Такая же тема в моем плагине alTCP. Все команды наподобие таймера работают, типа: tcpClientSend аналог TimerStart, и выполняется по окончанию то что укажешь в подпрограмме или таймере. При этом программа подвисать не будет.
Дата: Пт, 02 Сентября 2011, 20:18 | Сообщение # 23
Ветеран форума
Проверенные
Сообщений: 553
Offline
Quote (mishem)
Вместо 300 подставляем переменную. Вот вам и дубль клик.
Quote (Вадим)
Оба на! Шикарное решение! Подойдет для всех объектов, способных реагировать на событие "левый клик"! И без таймера! Получается, что Delay (пока длится) позволяет выполняться другим командам! Я как-то упускал этот момент ранее! mishem, спасибо за пример!!
Очень Интересное решение. Отладчик показывает, что пока не пройдёт команда Delay (а при клике она обновляет своё время), она не продолжит свою работу и не покажет результат 2-а раза.
Это такая же хитрость как и то, чтобы поставить пустую команду SetVar в горячей кнопке для устранения ошибок удерживания клавиши в проекте, повторяться будет только первая команда, что может помочь обойти непредсказуемые последствия выполнения кода.
Дата: Сб, 03 Сентября 2011, 00:49 | Сообщение # 27
Генератор идей
Модераторы
Сообщений: 3173
Offline
mishem, а как ты догадался, что можно Delay использовать? Ведь по логике построения кода в NeoBook строка должна выполняться за строкой, последовательно, и, таким образом, на каждый клик код должен бы выполняться весь и заново. А тут получается некое подобие второго потока, в котором приложение продолжает реагировать на события мыши и динамически модифицирует написанный код... Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Дата: Сб, 03 Сентября 2011, 06:18 | Сообщение # 28
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Alien, ну и что, что блокируется? Можно подумать что после того как кликнул два раза, будешь еще что то делать. Таймер тоже не очень хороший выход. И я порой не понимаю, почему многие стараются его использовать там, где без него можно обойтись. Если выполняется код и запускается таймер, то таймер обрывает выполнение кода и запускает свой. Если не предусмотрел и вставил в код таймера переменную которая использовалась в том коде который оборвал таймер, дальнейшее выполнение прерванного кода не возможно. Если выполнялось условие и таймер его оборвал,что произойдет? Ну и т.д. Блин, пишу из другого города с телефона. Не удобно пипец. Вадим, кнопки, таймер, клавиши прерввают выполнение кода. Просто приходилось сталкиваться с этим и искать решения. Не хочешь читать хелп?
Дата: Сб, 03 Сентября 2011, 07:51 | Сообщение # 29
Удаленные
mishem, я вообще стараюсь не использовать delay в проектах, не люблю я когда прога подтормаживает, я это чувствую каждым кончиком пальца Представь если бы у тебя все папки на компьютере открывались с небольшой задержкой, да это конечно не критично, но я бы сошел с ума. Потом в винде, используется именно таймер, который отсчитывает время в котором ты нажал на кнопку второй раз или нет, а не паузу, где вся система повиснет С двойным кликом ещё мягко все проходит, потому что пока ты нажмешь второй раз, время задержки уже пройдет и задержки почти не заметишь, а вот с одинарным кликом это уже видно не вооруженным глазом, что после клика ты ещё ждешь 300мс Вот попробуй в винде открывая папку двойным кликом, нажать как можно быстрее два раза, папка ведь мгновенно после второго клика откроется? А попробуй между первым и вторым кликом сделать небольшую паузу, папка ведь тоже откроется? В твоем примере на эти два вопроса можно ответить только отрицательно.