Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1104325636
alless
2004-12-29 16:07
2005.01.16
Трабл: Install Delphi 6


1-1103891964
Суслик
2004-12-24 15:39
2005.01.16
Использование LongBool (или WordBool) в логических выражениях


3-1103017628
anatolyk
2004-12-14 12:47
2005.01.16
Ускорить получение данных


14-1104347648
Vasya.ru
2004-12-29 22:14
2005.01.16
Срочно нужна консультация


3-1102798920
PEAKTOP
2004-12-12 00:02
2005.01.16
Перекроить данные в запросе из записей в домены





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский