Автор
|
Тема: Маленькая проблемка в виде точки
|
Finder |
опубликован 28-11-2001 19:43 MSK
Уважаемые, я тут с проблемкой столкнулся и стою на распутье. Суть в следующем: MS VC++ воспринимает кнопку Del на цифровой раскладке как запятую (при включонном рус.), и при вводе дробных чисел в проге не считает числом выражение "1,23" - требует "1.23". Но специфика проги такова, что пользоваться нужно именно цифровой раскладкой и на русском. Изменение установок в настройках винды дела не меняет. Может кто сталкивался с чем-то подобным?
|
eyes
|
опубликован 28-11-2001 19:53 MSK
Тебе надо искать специальную программулину, что вешается в трее и корректно обрабатывает клаву... название точно не помню...Или делать обработчик нажатий клавиш самому, даже может быть написать свой класс для удобства. [а по ночам ко мне приходят души убитых файлов] |
Finder
|
опубликован 28-11-2001 20:28 MSK
Неужели всё так запущено? |
zlelik
|
опубликован 28-11-2001 20:37 MSK
У меня была почти такая проблема, только мне нужна была универсальность, чтобы и 0,1 и 0.1 было число. Так я просто проверял строку при вводе и заменял , на . |
Finder
|
опубликован 28-11-2001 21:08 MSK
Ну это понятно, а больше никаких вариантов? |
SUnteXx
|
опубликован 29-11-2001 12:37 MSK
А почему бы Вам просто-напросто не проверять сообщение на ввод символа (вроде бы WM_CHAR), и если попадается запятая (точно не помню код клавиши, посмотрите сами!) заменять ее на точку (VK_DECIMAL)!Код будет приблизительно выглядеть так (на Win32API): case WM_CHAR: { if (wParam == ',') wParam = '.'; break; } Код не проверял, но думаю будет нечто вроде того!
|
Kosha
|
опубликован 29-11-2001 02:44 MSK
А вот и нет. Если потом вызвать стандартный обработчик, ему все равно запятая передастся. Вот если поставить хук на клаву... Перехватывать все ",", и вместо них посылать точки... Проще просто строку заменять. |
SUnteXx
|
опубликован 29-11-2001 12:33 MSK
С чего это будет "," передаваться? У меня так прога отсекает вс знаки кроме цифр и одной точки, т.е. если точка уже была или введен ненужный проге символ, то ставим вПарам в ноль и продолжаем обрабатывать мессагу дальше! Итог: комп пикает (т.е. пикнет один раз), а символ не выводится:)Попробую щаз что-нить похимичить, может что-нить получится! |
Flex Ferrum
|
опубликован 29-11-2001 13:12 MSK
А самый правильный вариант (ИМХО, конечно) - корректно написать процедуру преобразования числа из строки. У нас в России в качестве разделителя - запятая, в США и Англии - точка, и вообще, это может быть любой символ, указанный в настройках системы (Панель управления -> Региональные настройки). Так что мой совет - искать библиотеку, которая это понимает или писать самому. Кстати, VCL это сечет. И еще, посмотри на функцию GetNumberFormat. |
Finder
|
опубликован 29-11-2001 15:06 MSK
> SUnteXx А в MFC код куда бросать - в обработчик событий? >Kosha В принципе так я и сделал >Flex Ferrum GetNumberFormat - мне кажется, что проще всё-таки самому отлавливать строку и менять знаки. |
Flex Ferrum
|
опубликован 29-11-2001 15:28 MSK
А мне кажется, что нет... Берешь введенную строку и переформатируешь ее в соответствии со стандартной настройкой для штатов, после чего спокойно суешь в методы преобразования строк. Кстати, еще можешь всглянуть на функцию GetLocaleInfo |
Jack
|
опубликован 30-11-2001 21:27 MSK
У меня в свое время была подобная проблема и, если мне не изменяет память, полегчало после setlocale( LC_ALL, "Russian" ) в начале программы. |