Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.007 c
2-1389268749
Никита Парфенов
2014-01-09 15:59
2015.02.15
Как лучше конектиться к Firebird?


2-1389346370
NNK_RTR
2014-01-10 13:32
2015.02.15
Компонент RichEdit


15-1405172152
Пит
2014-07-12 17:35
2015.02.15
Лучшее средство разработки для WEB


11-1221430466
azsd
2008-09-15 02:14
2015.02.15
KOL 2.87 for Delphi 2009 (MCK worked.)


15-1405358878
Юрий Зотов
2014-07-14 21:27
2015.02.15
Нужны идеи.