Главная страница
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.005 c
15-1405400323
brother
2014-07-15 08:58
2015.02.15
Лицензирование WinXP


11-1258403062
abyss_by
2009-11-16 23:24
2015.02.15
KOLmdvXLGrid из KOLmdvControls. D7


15-1405343958
Ega23
2014-07-14 17:19
2015.02.15
Батя задачку выдал, а ответа так и не сказал. :)


15-1404595805
Юрий
2014-07-06 01:30
2015.02.15
С днем рождения ! 6 июля 2014 воскресенье


2-1389709055
Мимо прогодивший
2014-01-14 18:17
2015.02.15
Поиск образца текста в StringList