Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2015, 00:13   #1
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию Кнопка пропускает нажатия

Всем, доброго времени суток!
Имеется форма, на ней обычная кнопка (CommandButton) и простейший код, запускаемый кликом по этой кнопке. Обнаружил такой странный эффект, на который ранее никогда не обращал внимание: не все щелчки кнопки мыши отрабатываются на форме, при этом видно, что сама кнопка "нажимается", но код отрабатывается не всегда.

Тестовая процедура CommandButton1_Click() просто подсчитывает клики и выводит счетчик на форму. Но почему-то при 100 кликах счетчик показывает меньшие значения. Если нажимать не чаще раза в секунду и держать кнопку нажатой по секунде, то отрабатываются все клики без проблем.

Мышь исправна, компьютер работает вполне сносно, в других программах такого глюка не наблюдается.

Что это может быть за чертовщина и как с ней бороться?
Вложения
Тип файла: zip click-test.zip (7.0 Кб, 8 просмотров)
Debauchee вне форума Ответить с цитированием
Старый 24.02.2015, 01:38   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Да, такие вот тормозные кнопки (в 2007 офисе). Используйте SpinButton, он успевает отрабатывать + есть автоповтор + код очень простой
Код:
Private Sub SpinButton1_Change()
Label1 = SpinButton1
cur = SpinButton1 'если надо
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.02.2015, 09:51   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вероятно какие-то клики определяются как даблклики.
P.S. Точно, посмотрел файл.
Добавьте в код ещё такие две процедуры:
Код:
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If cur > firstRow Then
        cur = cur - 1
        Me.Label1.Caption = cur & " dbl" 'для информации
    Else
        Exit Sub
    End If
End Sub

Private Sub CommandButton2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If cur < lastRow Then
        cur = cur + 1
        Me.Label1.Caption = cur & " dbl" 'для информации
    Else
        Exit Sub
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 24.02.2015 в 10:00.
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2015, 15:11   #4
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию

Казанский, спасибо!
SpinButton - действительно не глючит, но это не совсем то, что нужно. У меня просто тестовый скрипт, в боевом применении там все намного сложнее двух кнопок "<" и ">".

Hugo121, спасибо! Вы абсолютно правы, часть кликов почему-то отрабатывается, как DblClick.
Увеличение скорости двойного клика в настройках мыши уменьшает число ложных DblClick(ов), но не совсем. Выходит, что проблема все-таки в мыши?
Debauchee вне форума Ответить с цитированием
Старый 24.02.2015, 15:17   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Проблема думаю в том, что на кнопке есть обработка двойного клика, но перед ним обрабатывается одинарный. А как сделать двойной, не кликнув два раза по одному?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2015, 17:39   #6
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию

Попросил прогнать мой тест на нескольких офисных машинах с разными мышами и ОС. Просил поставить средние значения скорости двойного клика. Вышеозначенный глюк наблюдается везде, но результаты лучше на сервере с Win.Server-2003 и USB-мышью и на ноутбуке под Win 8 и тоже внешней USB-мышью.
Цитата:
А как сделать двойной, не кликнув два раза по одному?
Может есть способ, чтобы при инициализации формы как-то временно программно менять настройки драйвера мыши, а при выгрузке формы - восстанавливать эти настройки?
Debauchee вне форума Ответить с цитированием
Старый 24.02.2015, 17:48   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да не при чём там драйвер - это кнопка обрабатывает одинарный клик, а если следом следует второй и уже получается даблклик - обрабатывает его как даблклик. На что у Вас обработчика то и не было - вот он и пропадал. Я обработчик добавил, и теперь у меня ничего не пропадает. У Вас пропадает?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2015, 18:18   #8
Debauchee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 41
По умолчанию

С двумя обработчиками работает нормально, но ИМХО это как-то "некрасиво", что ли...
Debauchee вне форума Ответить с цитированием
Старый 24.02.2015, 21:54   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Букв жалко?
Используйте любой другой элемент, где нет обработки даблкликов. Я правда ничего не предложу - кроме уже предложенного SpinButton сходу ничего не помню, искать нужно...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTP1.Get пропускает часть html apostol584 Работа с сетью в Delphi 1 10.06.2013 10:19
Пропускает Readln(<string>) olololeg Паскаль, Turbo Pascal, PascalABC.NET 11 12.11.2012 18:49
Проблема с Паскалем пропускает ввод Veor12 Паскаль, Turbo Pascal, PascalABC.NET 3 22.10.2011 11:46
Цикл For c TsCheckBox пропускает значения 0 2 3 ... ArtGrek Общие вопросы Delphi 7 30.01.2011 12:43
FindFirstFile не пропускает папки Nitrino Win Api 2 20.06.2010 20:03