Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Дата: Вс, 04 Сентября 2011, 20:13 | Сообщение # 61
Участник
Проверенные
Сообщений: 277
Offline
Quote (mishem)
За 30, 40, 100, 150. Не? Не выходит? Тогда зачем такой интервал?
А затем, чтобы можно было нажать за 160 и не ждать лишние 140мс. Ведь в моем варианте выходит что максимальная задержка после двойного клика равна 10мс, а в ваших всё-равно до 300мс ждать нужно. В этом то и весь прикол. Да, в случае одинарного нажатия мы ждем время проверки, но при двойном клике задержки практически не имеем. А можно ещё и тройной и четверной и даже десятерной клик сделать, если это конечно кому-нибудь когда-нибудь будет нужно. Таймеры зло, однако в данном случае он лечит ожидания.
Добавлено (04 Сентябрь 2011, 20:13) --------------------------------------------- Ну плагин 100% будет лучше, однако пока пользуемся средствами NB.
Дата: Вс, 04 Сентября 2011, 22:15 | Сообщение # 62
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Ну вот еще вариант с таймером. Более тщательно проверять нет времени, ехать надо. Кому интересно, попробуйте. Суть такова. При первом клике обычно команда идет на выделение объекта. По этому код должен быть не большой(имхо). Переменная [klik1] как раз это отображает, что первый клик сработал. При дубле выскакивает сообщение. Оказывается клик мыши обрывает и таймер.
Дата: Вс, 04 Сентября 2011, 22:59 | Сообщение # 64
Удаленные
Quote (Вадим)
Усе работает исправно!
Вадим, сделай следующее: нажми LBD-->LBU-->LBD допустим на папке в проводнике,папка откроется теперь сделай тоже самое на объекте,откроется или нет(алерт вылезет)?
Сообщение отредактировано Гарик - Вс, 04 Сентября 2011, 23:05
Дата: Пн, 05 Сентября 2011, 00:11 | Сообщение # 65
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Гарик)
теперь сделай тоже самое на объекте,откроется или нет(алерт вылезет)?
Нет, алерт в этом случае не вылезет. Но это уже нюансы. Если так тонко подходить, то можно воспользоваться монитором мыши из zmFunctions и сделать в точности как системный двойной клик. Честно говоря, я не представляю даже, где может понадобиться это различие: LBD-->LBU-->LBD применяется или LBD-->LBU-->LBD-->LBU... Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Дата: Пн, 05 Сентября 2011, 22:04 | Сообщение # 68
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Alien, в отладчике смотри. В переменной [klik1] будет текст. Алерт просто нельзя вешать,таймер уже отработает пока его закрывать будешь. Задержка есть? Мне эта мысль пришла прям перед отъездом в Москву(из нее и пишу сейчас ), по этому особо не было времени на проверку. Всю дорогу думал, зачем интервал таймера сделал 100? Так ответ пока и не нашел.
нажми LBD-->LBU-->LBD допустим на папке в проводнике,папка откроется
У меня не открывается.
Quote (Гарик)
небольшая неполноценность
Гарик, поставь в коде
If "[Timer1]" "<" "500" TimerStart "Timer1" "100" EndIf
вместо 500, 5000. И все будет открываться. Ну 5000 я загнул, если есть желание, поэкспериментируй при каком значении будет открываться.
Quote (mishem)
Так ответ пока и не нашел.
Приехал домой, и ответ сам по себе нашелся. Получается что чем больше значение, тем дольше задержка. Если поставить 500, то вообще не сработает. Не хочешь читать хелп?
Дата: Вт, 06 Сентября 2011, 00:59 | Сообщение # 69
Админ NeoBook
Администраторы
Сообщений: 7425
Offline
Граждане, миленькие! Объясните мне, тупому, что же именно вы стремитесь получить: просто "двойной клик" для тех объектов, у которых "простой клик" уже имеется, или и то и другое вместе?
Пишу почти в полной темноте (при свете экрана ноута), так-что не судите строго за скорость и ошибки.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Дата: Вт, 06 Сентября 2011, 01:19 | Сообщение # 71
Админ NeoBook
Администраторы
Сообщений: 7425
Offline
Quote (Вадим)
И одинарный и двойной клик по любому объекту!
Так не бывает!!! Тут "или" "или". Сам подумай!
Да ещё и "по любому объекту". Однако, батенька, вам с вашими запросами не NeoBook надобно осваивать, а, например, Delphi или С++
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Дата: Вт, 06 Сентября 2011, 01:30 | Сообщение # 72
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Peter)
Так не бывает!!!
Ну почему? Если сделать отлов события мыши и устанавливать над каким объектом был курсор во время события мыши. Т.е. нужно задать событие, которое будем мониторить и ждать имя объекта в переменную.
Тогда монитор двойного клика выглядел бы так (где-то я уже подобное фантазировал):
Такое возможно? В твоем мониторе мыши ведь есть возможность даже по косточкам события разбирать - LBD, LBU и т.д. В принципе, к имеющемуся монитору осталось только добавить возможность узнать - над каким объектом данное событие случилось и можно строить хоть одинарные, хоть двойные, и даже полуторные клики.Или я путаю чего? Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Сообщение отредактировано Вадим - Вт, 06 Сентября 2011, 01:32
Дата: Вт, 06 Сентября 2011, 01:45 | Сообщение # 73
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Peter, объект, у которого есть клик, но нет двойного. Нужно что бы срабатывал и тот, и тот. Вот здесь народ и столкнулся с "проблемой". Реализовать, нет проблем. Но как обычно, чем дальше в лес, тем ближе вылез. Нужен: Один клик, сработал код, или, Один клик, пока не узнал, есть ли дубль клик, первый код не работает, или Ну, короче сам развивай мысль. Надо, и то, и это, и еще если я левой кнопкой вдруг затормозил, да нечаянно правой нажал, да еще в этот момент колесиком крутнул, но дубльклик должен сработать. Ну примерно так...
и устанавливать над каким объектом был курсор во время события мыши.
имхо, мож я уже пьян, но для дубль.., ни к чему устанавливать монитор, так как первый щелчок, уже определяет что за объект находится. Дальнейший пост, не коментирую. Надеюсь понятно объяснил.
Дата: Вт, 06 Сентября 2011, 02:00 | Сообщение # 77
Админ NeoBook
Администраторы
Сообщений: 7425
Offline
Quote (Вадим)
Такое возможно?
"Технически", возможно(!), да, но, вот "логически" -
Quote (Вадим)
и даже полуторные клики.Или я путаю чего?
Вадим, ну подумай сам: одиночный клик ВСЕГДА будет предшествовать двойному просто "по-определению". И какая же "каша" тогда получится? Точнее - не каша, а двойной просто не будет срабатывать. Или надо делать "задержку" выполнения простого клика, что по сути - абсурд! Покажи мне хоть один пример комбинации кликов. Мне подобное ещё не доводилось видеть!
Quote (mishem)
Это ж пипец разработчикам.
А вот это - ТОЧНО!!!
Что касаемо самого двойного клика средствами NB, то тут все просто - см. прикрепление.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Дата: Вт, 06 Сентября 2011, 02:21 | Сообщение # 78
Генератор идей
Модераторы
Сообщений: 3173
Offline
Quote (Peter)
одиночный клик ВСЕГДА будет предшествовать двойному просто "по-определению".
А для этого и нужна подпрограмма. Допустим одиночный клик отмониторился над объектом Объект2, и запустилась Подпрограмма1, в которой стоит условие - если текущий объект есть Объект1, то делаем то-то. А оказалось, что Объект2, следовательно условие не выполняется и Подпрограмма не срабатывает. Но тут же был второй клик (т.е. оказалось, что это был не одиночный, а двойной клик), срабатывает Подпрограмма2 (назначенная на даблклик), а в ней условие - если текущий объект есть Объект2, то делаем то-то. А у нас как раз текущий объект оказался Объект2, следовательно выполняется подпрограмма. Т.е. условия выполнения подпрограммы в ней самой. И не важно что одинарный клик всегда предшествует двойному, пусть сработает первая строчка подпрограммы одинарного при двойном клике, ничего страшного.
При таком подходе единственное ограничение - это сложность в том, чтобы развести подпрограммы для разных событий мыши применимых для одного и того же объекта - придется сделать соответствующие условия и наверное не всегда это будет возможно. Но это уже мелочь, поскольку встречаться такая ситуация будет крайне редко.
Дата: Вт, 06 Сентября 2011, 04:46 | Сообщение # 79
Удаленные
Вадим, почти у каждого объекта есть события входа и выхода мыши, вот его можно использовать для определения над каким объектом мышь находится. И единственное что останется сделать глобальный монитор двойного клика.
Дата: Вт, 06 Сентября 2011, 12:17 | Сообщение # 81
Ветеран форума
Проверенные
Сообщений: 553
Offline
Судя по примеру Petera можно сказать что можно управлять двойным кликом, используя только один таймер.Или всё таки будут перебои в последовательности работы этого кода при нескольких кнопках.
А может будет лучше, если создать кнопку в delphi с двойным кликом, передавая события в NB через контейнер Rectangle. Хотя может это дурацкая затея.
Win7 Pro SP1 x64; NBv5.5.4rus,v5.6.2rus, v5.7.0en, Opera
Дата: Вт, 06 Сентября 2011, 12:29 | Сообщение # 82
Админ NeoBook
Администраторы
Сообщений: 7425
Offline
Quote (Вадим)
А для этого и нужна подпрограмма. Допустим одиночный клик отмониторился над объектом Объект2, и запустилась Подпрограмма1, в которой стоит условие - если текущий объект есть Объект1, то делаем то-то. А оказалось, что Объект2, следовательно условие не выполняется и Подпрограмма не срабатывает. Но тут же был второй клик (т.е. оказалось, что это был не одиночный, а двойной клик), срабатывает Подпрограмма2 (назначенная на даблклик), а в ней условие - если текущий объект есть Объект2, то делаем то-то
Подпрограмма это всего-лишь способ (вид) оформления кода, но суть (ссуть) совсем в другом. Похоже, мы говорим о разных вещах: я - о событиях для ОДНОГО И ТОГО ЖЕ объекта, а ты - о событиях для двух разных. Вадим, давай расставим точки над "и". Для одного объекта НЕВОЗМОЖНО назначить одновременно реакцию на просто клик и на двойной клик, т.к.:
Quote (Peter)
одиночный клик ВСЕГДА будет предшествовать двойному просто "по-определению". И какая же "каша" тогда получится? Точнее - не каша, а двойной просто не будет срабатывать.
Будет всегда отрабатываться одиночний клик, если на него назначена реакция! Но, для двух разных объектов клики можно разделить, и вопрос только в детектировании объекта над которым находится курсор в момент "мышиного события".
Или всё таки будут перебои в последовательности работы этого кода при нескольких кнопках.
Ну, если умудриться щелкать ОДНОВРЕМЕННО по двум кнопкам сразу...
И вообще, кто сказал что таймер это - плохо? Глупость! Сама винда детектирует двойной клик через таймер, да и сама она по-существу один большой таймер! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Дата: Вт, 06 Сентября 2011, 12:40 | Сообщение # 83
Эксперт форума
Модераторы
Сообщений: 5942
Offline
Quote (Gorezcaid)
А может будет лучше, если создать кнопку в delphi с двойным кликом, передавая события в NB через контейнер Rectangle.
Создать плагин для дубль клик, хорошая затея. Так как Rectangle вообще не имеет такого понятия как клик. А очень часто, ну именно мне, хочется повесить на этот объект и клик, и дубль...
Quote (Peter)
Для одного объекта НЕ ВОЗМОЖНО назначить одновременно реакцию на просто клик и на двойной клик, т.к.:
Почему? Или я сейчас что то не догоняю, или ты не прав. На сколько я понимаю, на первый клик вешается просто выделение объекта. Одна строчка кода.(это если автор не захочет портянку соорудить для первого клика) на второй, пошел свой код. Пример чуть выше. За 500-300 мс, первый код успеет сработать, а дальше пошел второй, если будет второй клик.
Я. и Дембель. . Я точно, за Дембеля не отвечаю. Почему? Уже писал. Не всегда, не везде , но это зло. И с ним, надо обращаться крайне осторожно. А не так, что в любом месте его пихать. Один таймер, рвет выполнение кода другого таймера. Клик, обрывает выполнение любого кода. А это уже зло. Хотя, может быть и во благо. В зависимости от ситуации. Не хочешь читать хелп?
Дата: Вт, 06 Сентября 2011, 12:41 | Сообщение # 84
Необукер
Проверенные
Сообщений: 4238
Offline
Quote (mishem)
Почему?
Разговор идет о двойном клике, как событие/самостоятельной команды, а пример Петра это имитация двойного клика. Там всегда обрабатывается один клик. Напимер в хтмл есть событие двойного клика, а в нб нет... И если в хтмл назначить оба события, то обрабатываться будет только одиночный клик можешь потестировать(сохрани в файл *.html)
Пример Петра, это сокращенный мой пример. В моем, можно повесить команду на первый клик. И нет проблем. Дальше мы можем повесить команду и на второй клик. Опять ответ. Почему? Не хочешь читать хелп?
Дата: Вт, 06 Сентября 2011, 13:21 | Сообщение # 88
Необукер
Проверенные
Сообщений: 4238
Offline
Quote (mishem)
Где тестить, и как?
не парься, я так расскажу: На одну кнопку повешено два события - одиночный и двойной клик, когда ты кликнешь 2 раза по кнопке, то появится мессага, что сделан был один клик, но до второго сообщения о дубль клике дело не дойдет, т.к. перебило событие одного клика. Но если не вешать событие, где например требуется участие пользователя, то можно отловить оба события Обработка двойного клика=onclick, ondblclick
Quote (mishem)
И при чем сдесь хтмл?
это просто пример с объектом, где есть событие дубльклика
Добавлено (06 Сентябрь 2011, 13:21) --------------------------------------------- Перечитал последние сообщения, и понял твой вопрос. Петр прав, нельзя повесить оба события одновременно. Один(первый) клик всегда будет отрабатываться, как одиночный. И неважно два-три раза ты кликну, первый клик идет один!
Сообщение отредактировано Сергей - Вт, 06 Сентября 2011, 13:14
Дата: Вт, 06 Сентября 2011, 13:42 | Сообщение # 89
Наш дизайнер
Администраторы
Сообщений: 5959
Offline
Quote (Сергей)
Перечитал последние сообщения, и понял твой вопрос. Петр прав, нельзя повесить оба события одновременно. Один(первый) клик всегда будет отрабатываться, как одиночный. И неважно два-три раза ты кликну, первый клик идет один!
это везде так. я долго бился головой об стену, вешаю на обьект два разных события (одиночный клик и двойной). так при двойном всегда сперва срабатывает одиночный. Приходится вручную делать доп. ожидание при одном клике и проверять не поднялся ли флаг в двойном, если да то отменять дальнейшую обработку одиночного.
Добавлено (06 Сентябрь 2011, 13:42) --------------------------------------------- главное чтобы на время этого ожидания не блокировалось выполнение приложения, чтобы происходил дальнейший детект второго клика. Так и происходит, благодаря чему во время задержки можно определить был ли повторный клик. Иначе клики всегда были бы одиночными.
Дата: Вт, 06 Сентября 2011, 22:46 | Сообщение # 90
Удаленные
В принципе,если делать плагин,то можно будет отлавливать левый дабл,средний дабл и правый дабл над любым контролом,не зависимо какие у него есть события, или их вообще нет(например Rectangle). Точно так же можно ловить и одинарный клик (левый,средний,правый)над любым контролом Но в совокупности не прокатит.