Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

проблема с кнопкой VK_DECIMAL на цифровой клавиатуре   Найти похожие ветки 

 
Bless ©   (2004-12-24 13:44) [0]

Люди, работающие с программой, вводят разные числа в основном с использованием цифровой клавиатуры (справа от основной).
И разделитель дробной и целой частей - под кнопкой VK_DECIMAL (Del на цифровой клавиатуре при выключенном NumLock).
Но при русской раскладке они не могут ввести разделитель дробной части (".") с помощью этой кнопки, потому что ей тогда соответствует символ "," а не "." и им приходится постоянно нажимать "." на основной клавиатуре. Короче, жалуются, что очень неудобно.
Как лучше всего сделать, чтобы при любой раскладке для всех компонентов в проекте, для которых это важно (собственно, это только DBAware-компоненты), кнопка VK_DECIMAL оставалась разделителем целой и дробной частей?
Обрабатывать ONKeyDown для каждого компонента - это ж задолбаться можно. Компонентов тьма. И унаследовать их от общего предка, который эту ситуацию разрулит, тоже поздно, придется все переписывать.
Пока что мне пришло на ум только в обработчике Application.OnMessage перехватывать WM_KEYDOWN при wParam=VK_DECIMAL и вместо него генерировать WM_CHAR с нужным кодом клавиши-разделителя.
Чем это плохо, какие грабли могут ждать и может можно как-то лучше.
Пока что меня смущает то, что Application.OnMessage вызывается слишком часто и на кажном сообщении это - расходы на вызов моего обработчика. Это ж замедлит работу приложения неслабо, наверное.

В общем хотелось бы обсудить варианты решения этого вопроса.


 
olookin ©   (2004-12-24 20:40) [1]

У меня такой же обработчик, и ничего не тормозит (по крайней мере незаметно). И если в этом обработчике (как и у меня) поставить условие на нужное сообщение, то эффект достигается (опять-таки у меня)... В общем, я не вижу проблем при использовании OnMessage.


 
Bless ©   (2004-12-28 10:49) [2]

olookin[1]>
Ну, визуально и у меня вроде не тормозит. Но как представлю себе СОТНИ сообщений и на каждом самом захудалом и ненужном: поместить в стек адрес возврата, поместить в стек адрес регистр флагов, да еще и параметры, да еще и self передать, а потом все в обратном порядке... и все это только ради того, чтоб обработать ОДИН не самый частый случай, то аж жаба давит.
Ну, поскольку вариантов больше нет, то так наверное и останется.

Хотя еще не нравится, что после моего вмешательства приложению приходит WM_CHAR, до которого не приходило соответствующего ему WM_KEYDOWN. Не представляю, правда, на что это может влиять, но мало ли.
И еще одно: всегда ли сообщения WM_KEYDOWN передаются в очередь сообщений или бывает так, что и напрямую вызывается процедура окна? То есть, в варианте с OnMessage гарантированно ли я перехватываю ВСЕ сообщения WM_KEYDOWN?


 
Anatoly Podgoretsky ©   (2004-12-28 13:36) [3]

Ты путаешь, точка в русском языке не является десятичным разделителем, а вот запятая именно оно и есть.



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
9-1092914672
Gandalf
2004-08-19 15:24
2005.01.16
Игровой проект


14-1103881207
Ozone
2004-12-24 12:40
2005.01.16
Встреча в Тюмени (Тобольске)


3-1102832824
able
2004-12-12 09:27
2005.01.16
Получение текущей записи в DBGrid e


1-1104825284
antoxa
2005-01-04 10:54
2005.01.16
Можно ли на Delphi писать для Интернет под UNIX


1-1104166233
Volfram
2004-12-27 19:50
2005.01.16
Debugger Kernel is missing.