WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Маленькая проблемка в виде точки

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Маленькая проблемка в виде точки
Finder опубликован 28-11-2001 19:43 MSK   Click Here to See the Profile for Finder   Click Here to Email Finder  
Уважаемые, я тут с проблемкой столкнулся и стою на распутье. Суть в следующем:
MS VC++ воспринимает кнопку Del на цифровой раскладке как запятую (при включонном рус.), и при вводе дробных чисел в проге не считает числом выражение "1,23" - требует "1.23". Но специфика проги такова, что пользоваться нужно именно цифровой раскладкой и на русском.
Изменение установок в настройках винды дела не меняет.
Может кто сталкивался с чем-то подобным?
eyes опубликован 28-11-2001 19:53 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
Тебе надо искать специальную программулину, что вешается в трее и корректно обрабатывает клаву... название точно не помню...

Или делать обработчик нажатий клавиш самому, даже может быть написать свой класс для удобства.

[а по ночам ко мне приходят души убитых файлов]

Finder опубликован 28-11-2001 20:28 MSK     Click Here to See the Profile for Finder  Click Here to Email Finder     
Неужели всё так запущено?
zlelik опубликован 28-11-2001 20:37 MSK     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
У меня была почти такая проблема, только мне нужна была универсальность, чтобы и 0,1 и 0.1 было число. Так я просто проверял строку при вводе и заменял , на .
Finder опубликован 28-11-2001 21:08 MSK     Click Here to See the Profile for Finder  Click Here to Email Finder     
Ну это понятно, а больше никаких вариантов?
SUnteXx опубликован 29-11-2001 12:37 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
А почему бы Вам просто-напросто не проверять сообщение на ввод символа (вроде бы WM_CHAR), и если попадается запятая (точно не помню код клавиши, посмотрите сами!) заменять ее на точку (VK_DECIMAL)!

Код будет приблизительно выглядеть так (на Win32API):

case WM_CHAR:
{
if (wParam == ',')
wParam = '.';

break;
}

Код не проверял, но думаю будет нечто вроде того!

Kosha опубликован 29-11-2001 02:44 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
А вот и нет. Если потом вызвать стандартный обработчик, ему все равно запятая передастся.
Вот если поставить хук на клаву... Перехватывать все ",", и вместо них посылать точки... Проще просто строку заменять.
SUnteXx опубликован 29-11-2001 12:33 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
С чего это будет "," передаваться? У меня так прога отсекает вс знаки кроме цифр и одной точки, т.е. если точка уже была или введен ненужный проге символ, то ставим вПарам в ноль и продолжаем обрабатывать мессагу дальше! Итог: комп пикает (т.е. пикнет один раз), а символ не выводится:)

Попробую щаз что-нить похимичить, может что-нить получится!

Flex Ferrum опубликован 29-11-2001 13:12 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А самый правильный вариант (ИМХО, конечно) - корректно написать процедуру преобразования числа из строки. У нас в России в качестве разделителя - запятая, в США и Англии - точка, и вообще, это может быть любой символ, указанный в настройках системы (Панель управления -> Региональные настройки). Так что мой совет - искать библиотеку, которая это понимает или писать самому. Кстати, VCL это сечет. И еще, посмотри на функцию GetNumberFormat.
Finder опубликован 29-11-2001 15:06 MSK     Click Here to See the Profile for Finder  Click Here to Email Finder     
> SUnteXx
А в MFC код куда бросать - в обработчик событий?
>Kosha
В принципе так я и сделал
>Flex Ferrum
GetNumberFormat - мне кажется, что проще всё-таки самому отлавливать строку и менять знаки.

Flex Ferrum опубликован 29-11-2001 15:28 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А мне кажется, что нет... Берешь введенную строку и переформатируешь ее в соответствии со стандартной настройкой для штатов, после чего спокойно суешь в методы преобразования строк. Кстати, еще можешь всглянуть на функцию GetLocaleInfo
Jack опубликован 30-11-2001 21:27 MSK     Click Here to See the Profile for Jack  Click Here to Email Jack     
У меня в свое время была подобная проблема и, если мне не изменяет память, полегчало после setlocale( LC_ALL, "Russian" ) в начале программы.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.