В C++ Builder (и в VC++ наверное тоже) командой int(символ) получаем какой-то код клавиши например int(',') - код 44. А ASCII код символа ',' - 188. Какая между ними разница? Например в Edit'e пристутствует этот символ(,), то если применить команду wsprintf с 2-м параметром "%d" то получаю ASCII код этого символа. А как получить 2-й вариант кода? Скорее всего надо преобразовать символ в число. Но как это правильно сделать?
> "ASCII код символа ',' - 188" А с чего это ты взял ? Открой виндовую таблицу символов charmap.exe и убедись, что запятая стоит на 44й позиции (пробел = 32), а на 188-й какая-то фигня типа "ј". Про wsprintf я ничего не понял. А специально преобразовывать символ в число никак не надо, т.к. символ на уровне программы это и есть беззнаковое целое число размером в 1 байт. Поэтому достаточно простого приведения типов. PS: А-а, понял что тебе надо. Ты все перепутал: 44 - это и есть ASCII код символа "," а 188 - это virtual-key (VK) код нажатия клавиши ",". Для прообразования символа в VK-код в WinAPI есть функция VkKeyScan, а из VK в ASCII код символа MapVirtualKey.
Ну если проделываю вот это: invoke wsprintf,addr buf,%d,wParam;wParam - KeyCode invoke SetWindowText,hwndedit2,addr buf То получаю код запятой - 188, а нужно получить 44. Как это сделать?
leo, если проделываю вот это(при нажатии клавиши в окне Edit'a): invoke wsprintf,addr buf,addr fmt,wParam;fmt - "%d" invoke SetWindowText,hwndedit,addr buf То получаю код запятой - 188, а нужно получить 44. Как это сделать?
ActioN Тебе leo уже все объяснил: Для прообразования символа в VK-код в WinAPI есть функция VkKeyScan, а из VK в ASCII код символа MapVirtualKey.
ActioN invoke MapVirtualKey,wParam,2 invoke wsprintf,addr buf,addr fmt,eax Еще можно транслировать сообщения WM_KEYDOWN в WM_CHAR с помощью TranslateMessage