powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / таблица соответствия QWERTY и ЙЦУКЕН
5 сообщений из 30, страница 2 из 2
таблица соответствия QWERTY и ЙЦУКЕН
    #39558122
ЙЦУКЕНQWERTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_ЙЦУКЕНQWERTY
Код: pascal
1.
Res := ToAsciiEx(VkKey, 0, LStates, @Result, 0, CRussian);

За использование неинициализированной переменной можно сильно отгрестивы невнимательно читали п.1
LStates - в данном контексте вообще не используется, хоть FFFF-ми её всю заполни.

_Vasilisk_ЙЦУКЕНQWERTY
Код: pascal
1.
2.
 else if IsUpperCase(VkKey) then
    Result := AnsiUpperCase(Result)[1];

Вот же любите вы раскладывать грабли
VkKeyScan functionReturn value

Type: SHORT
If the function succeeds, the low-order byte of the return value contains the virtual-key code and the high-order byte contains the shift state, which can be a combination of the following flag bits.
Return valueDescription1Either SHIFT key is pressed. и щто?
...
Рейтинг: 0 / 0
таблица соответствия QWERTY и ЙЦУКЕН
    #39558178
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсегда считал, что $409 достаточно..
За разовую простую задачу - перебор :)
...
Рейтинг: 0 / 0
таблица соответствия QWERTY и ЙЦУКЕН
    #39558209
ЙЦУКЕНQWERTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюбезныйавторВсегда считал, что $409 достаточно..
За разовую простую задачу - перебор :)расшифруйте вашу мысль в ширину, плс.
...
Рейтинг: 0 / 0
таблица соответствия QWERTY и ЙЦУКЕН
    #39558612
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЙЦУКЕНQWERTYLStates - в данном контексте вообще не используется, хоть FFFF-ми её всю заполни.Да что Вы говорите? А почему у меня используется?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function QwertyToRUS(Ch: Char): Char;
const
  CEnglish = $0409;
  CRussian = $0419;
  CShiftMask = $0100;
  CCtrlMask  = $0200;
  CAltMask   = $0300;
var
  VkKey: SmallInt;
  Res: LongInt;
  LStates: TKeyboardState;
begin
  VkKey := VkKeyScan(Ch);
  FillChar(LStates[0], Length(LStates) * SizeOf(LStates[0]), 0);
  if VkKey and CShiftMask = CShiftMask then
    LStates[VK_SHIFT] := $FF;
  if VkKey and CCtrlMask = CCtrlMask then
    LStates[VK_CONTROL] := $FF;
  if VkKey and CAltMask = CAltMask then
    LStates[VK_MENU] := $FF;

  Res := ToUnicodeEx(VkKey, 0, LStates, @Result, 1, 0, CRussian);

  if Res = 0 then
    Result := Ch
  else if Res < 0 then
    raise Exception.Create('The specified key is a dead key')
  else if Res > 1 then
    raise Exception.Create('The dead-key ...... a single character');
end;
...
Рейтинг: 0 / 0
таблица соответствия QWERTY и ЙЦУКЕН
    #39558890
ЙЦУКЕНQWERTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_ЙЦУКЕНQWERTYLStates - в данном контексте вообще не используется, хоть FFFF-ми её всю заполни.Да что Вы говорите? А почему у меня используется?
Код: pascal
1.
2.
3.
4.
...
  if VkKey and CShiftMask = CShiftMask then
    LStates[VK_SHIFT] := $FF;
...

очень интересно.
я считал, что нужно ставить 1-цу.
нихрена не прокатывало.
полез ещё раз в MSDN.
почитал внимательно...
1-ца ставится только для "триггерных" переключателей, типа CAPS LOCK , NUM LOCK и т.п.
а для Shift-а и иже с ними нужно ставить СТАРШИЙ бит, а не младший.
MSDN If the high-order bit of a byte is set, the key is down (pressed).т.е. $80 а не $01
вот ведь блин!

коллективный разум рулит!
СПАСИБО!
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / таблица соответствия QWERTY и ЙЦУКЕН
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]