Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Внизпроблема с кнопкой 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c