Как при двойном щелчке избавиться от Click? | |
---|---|
andrewk Автор Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Если сделать двойной щелчок мышки, то происходят события:
MouseDown, MouseUp, Click, MouseDown, MouseUp, DblClick. В связи с этим «промежуточным» Click что-то не соображу, как повешать разные действия на одинарный и двойной щелчки? Или как в этом Click узнать, что будет двойной и не выполнять своё «одиночное» действие? |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Если бы это было так, то DblClick и Click нельзя было использовать одновременно (вешать на них обработчики в одном обьекте), а на самом деле это нормально работает...
|
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
По идее, DblClick возникает после второго клика через системно установленоое время двойного клика. Может попробовать запускать таймер и проверять это время? Что-то типа такого:
------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Первое, что пришло в голову:
1. Click ничего не делает, кроме запуска некоего таймера, который должен выполнить процедуру через время, большее чем время DblClick. 2.1 Если до DblClick дело доходит, то он "гасит" этот таймер и делает, что должен. 2.2 Если до DblClick дело не доходит, то таймер срабатывает, выключается и выполняет то, что должен делать Click. Можно сделать то же, но чуть иначе: 1. Добавить к методу Click параметр. 2. По умолчанию этот параметр будет равен .F., означающий, что тело метода Click выполнять не нужно. 3. А из таймера вызывать Click c непустым параметром, что будет означать "выполнить тело метода Click". Исправлено 1 раз(а). Последнее : akvvohinc, 02.03.20 19:36 |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Если последовательное срабатывание обоих методов при DblClick - это нормально, то ты прав - это работает. Если же тебе нужно "либо - либо", то что-то придется придумать. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
Да ничего делать не надо. И заморачиваться на тему, как оно там работает не надо. Знаете почему? Потому что оно работает и никто еще не пожаловался на то, что клик вместо даблклика сработал или они в кучу начучучили. Солнце всходит и заходит. Регулярно. Без ошибок. Не мешайте ему.
------------------ Что-то с памятью моей стало, всё что было не со мной- помню. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
andrewk Автор Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Чтобы убедиться, что это так, достаточно включить трейсинг в дебаггере. Ну, или выполнить простейший пример: Результат: Какие тут могут быть сомнения? Именно поэтому и спрашиваю, как обойти? Исправлено 4 раз(а). Последнее : andrewk, 02.03.20 20:39 |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Йоперный теятр. Мой пример наверху невидимый что ли ни для кого совсем не был? ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
andrewk Автор Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Ну почему же, видимый)) Народ усомнился в существовании проблемы, я её пояснил. Насчёт твоего примера. Я не понял, как это поможет в действии, выполняемом в Click, узнать, что щелчок не одинарный, а двойной? Ведь Click выполнится до второго MouseDown. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
andrewk Автор Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
А, ну так вариант. Теоретически. На самом деле я думал, есть какой-то общеизвестный костыль, который я не вижу. Чтоб универсально включить это в базовый класс. Но ради даблклика, который в конкретном объекте может и не нужен, пускать таймеры в каждом клике... из пушки по воробьям, проще от даблкликов вообще отказаться, наверное. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Вот "универсально" и создавай (CreateObject) таймер-объект в своих базовых классах (в тех, что требуют различать клик и даблклик). |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Странно.
То же не поверил, накидал тест. И точно. так и есть, всегда сначала Click. Задумался, почему же никогда не натыкался в реале. Полагаю, слишком специфичные события. DblClick как правило на гриде, что бы быстро открыть на редактирование строку, либо выбрать из справочника. А Click... так сразу и в голову не приходит зачем он))) Так что как вариант. Просто тщательно рассмотреть, так ли уж нужны, на одном объекте оба события (обработка конечно же) |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Конечно, интерфейс планируется не совсем стандартный. Как предположение - требуется (хочется) обработка различных вариантов нажатий (в том числе с использованием клавиш-модификаторов) на изображении или лейбле. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Может подойдет что-то вроде этого:
|
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Или может так:
ЗЫ. Наверное, все же надо вставить в цикл i = i + 1. ЗЫ2. Столько все-таки понтов у асов форума из-за одного цикла. А самые крутые спецы даже раскрасить посты сумели. Исправлено 2 раз(а). Последнее : lulgu, 03.03.20 23:29 |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Не плачь, ещё научишься. Я не крут и нынче не красил. Буду постоянен, скажу тебе просто: ДЛБ |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
|
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Вам осталось малость - дружно Grid-ы разукрасить таймерами и кодами, словно новогоднюю елку. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Функция SECONDS() имеет некоторый максимум, который сумма (SECONDS() + _DBLCLICK) может иногда превышать. И тогда этот цикл будет крутиться вечно, или придется что-то нажать, превратив Click в DblClick. Кроме того, INKEY('m') сработает не только от мыши, а значит, быстрое нажатие мыши и клавиши сработает как DblClick. |
Re: Как при двойном щелчке избавиться от Click? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Чем кончилось-то?
Забыл тогда спросить, а что за обьект, на котором требуется различать Клик и 2Клик? ...Как-то не было необходимости что-ли, что не замечал. У меня DblClick обычно "запаралелен" с RightClick, в смысле, что в DblClick выполняется умолчательная (первая) операция из списка, который вывешивается оператору по RightClick. Конечно, таймером можно различить, просто писанины "много". Что за задача, что за видеоэффекта хочется добиться? Ведь на Click висит и умолчательная обработка, типа, в ТекстБокс - "встать на позицию символа" и пр. |
© 2000-2024 Fox Club  |