Текущий архив: 2015.02.15;
Скачать: CL | DM;
Вниз
Проблема: неожиданная реакция на клик мыши в открывшемся окне Найти похожие ветки
← →
KSergey © (2014-07-14 16:03) [0]Поделитесь, плиз, сталкивался ли кто-нибудь и как решали такую проблему.
Модальный диалог номер 1. На нем кнопка условно "Открыть диалоговое окно номер 2".
На диалоговом окне 2 в том месте, где на диалоге 1 производим клик мыши по кнопке, находится какой-то контрол.
Если на кнопке из диалога 1 "Открыть диалоговое окно номер 2" случайно нажать 2 раза - то на появившемся диалоге 2 указанный "какой-то контрол" среагирует на клик мыши, как на одинарный (понятно, т.к. ему достанется 1 клик).
Подскажите, кто и как борется с такими эффектами?
← →
Styx (2014-07-14 16:44) [1]
> Подскажите, кто и как борется с такими эффектами?
Учим пользователей, что нефиг дабл-кликать кнопки. Хотя они, подлецы, плохо обучаются.
← →
Sha © (2014-07-14 17:09) [2]Application.OnMessage ?
← →
KSergey © (2014-07-14 17:15) [3]> Sha © (14.07.14 17:09) [2]
Можно поподробнее?
← →
Sha © (2014-07-14 17:27) [4]если пришло Msg.Message=WM_LBUTTONDOWN тогда
Ctrl:=FindVCLWindow(Mouse.CursorPos);
далее по вкусу
← →
й (2014-07-14 19:18) [5]попробуй Button.Enabled:=false прямо в Button.OnClick
обратно :=true - в любом подходящем месте
← →
Sha © (2014-07-14 20:26) [6]> й (14.07.14 19:18) [5]
у него второй клик уже на другом контроле,
да и писать такое на каждую кнопку устанешь
← →
KSergey © (2014-07-14 20:51) [7]Sha © (14.07.14 17:27) [4]
Что по вкусу-то?
Можно не кусками кода в данном случае - а словами чего предлагается сделать с этим прилетевшим кликом?
как именно клик изловить - придумается или отдельно спросится.
Пока совершенно не могу уловить предлагаемую идею кроме того, что предлагается обработать WM_LBUTTONDOWN, но как именно?
← →
й (2014-07-14 20:51) [8]Sha> у него второй клик уже на другом контроле,
точно, тупанул
вспомнился совсем другой случай, когда по двойному клику два раза повторялась одна и та же операция
для особо плохообучающихся пользователей логично настроить проводник на открытие файлов и всего остального по 1 клику
дабы не путались между браузерной парадигмой 1 клика и проводничной дабл-кликовой
кликабельные итемы начинают выделяться подчеркиванием (как вариант - только при наведении курсора), так что всё очевидно
тогда, скорее всего, о дабл-клике они смогут благополучно забыть - везде нужен только 1
← →
KSergey © (2014-07-14 20:58) [9]>если пришло Msg.Message=WM_LBUTTONDOWN тогда
> Ctrl:=FindVCLWindow(Mouse.CursorPos);
Между каждыми двумя кликами мыши (глобально на приложение) замерять время и если время меньше какого-то интервала и получились разные контролы (на разных формах?) - съедать второй клик?
Как-то это странно и неожиданно, признаюсь.
Я вот думаю: сам я на такое натыкался только в миранде. хотя ситуация видится вроде вполне типичной. Но почему тогда на нее нет массовых жалоб на разные приложения, да и сам не натыкался? Как так получается? может есть секрет разработки интерфейсов? может многие другие фреймворки, в отличии от дельфи, содержат в потрохах какой-то трюк типа описанного?
← →
это все... (2014-07-14 22:18) [10]да тупо вязять обработчики после ефрейторского зазора.
секунда после того как.
заодно бонусом застрахуешься от случайного обнуления событий в дизайнере.
← →
RWolf © (2014-07-14 23:01) [11]
> как решали такую проблему.
не открывать модальные диалоги один за другим.
но, если очень хочется, делать их разной высоты, чтобы второй клик ушёл в молоко.
← →
Sha © (2014-07-15 00:34) [12]> KSergey © (14.07.14 20:58) [9]
> Как-то это странно и неожиданно, признаюсь.
Вариантов всего 3: обработать, игнорировать, передизайнить. Тебе выбирать.
В OnMessage ты знаешь все: оба контрола, дельту времени и дельту координат.
Если дизайн не менять, то там и решать, что делать, удобнее всего.
← →
KSergey © (2014-07-15 09:45) [13]Sha,
что удивительно: вопрос в том "что делать", причем я это уточнил несколько раз, а вы упорно рассказываете "как", причем по кругу.
Зачем?
← →
Sha © (2014-07-15 13:08) [14]KSergey,
потому, что решать должен пациент
← →
KSergey © (2014-07-15 15:30) [15]Т.е. ответить на поставленный вопрос - нечего
От чего бы так и не сказать, без кривляний.
← →
й (2014-07-16 19:35) [16]TModalForm2.Timer1.Interval = 300; //примерно
TModalForm2.OnActivate: Enabled := False; Timer1.Enabled := True;
TModalForm2.Timer1.OnTimer: Enabled:=True; Timer1.Enabled:=False,
Страницы: 1 вся ветка
Текущий архив: 2015.02.15;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.005 c