Главная страница
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.042 c
8-1097356869
D5_User
2004-10-10 01:21
2005.01.16
Как проще сделать зуминг?


14-1103614248
Кудесник
2004-12-21 10:30
2005.01.16
По каким моментам кода вы понимаете - профи или так... ?


3-1103111618
Heretic
2004-12-15 14:53
2005.01.16
Проблемы с EhLib (EhDbGrid) при связи таблиц


14-1103913597
olookin
2004-12-24 21:39
2005.01.16
Какова роль общества в прогрессе?


4-1101573548
ychenick
2004-11-27 19:39
2005.01.16
Ограничение прав и смена пользователя.