Как да преброим всички знаци от клавиатурата

всички

Да кажем, че оформлението е "английско" и SHIFT не е натиснат, програмата чете знаците, присвоявайки на всеки бутон определен знак от определен клавиш. потребителят натисна SHIFT и буквите се промениха на главни и съответно "1234567890" =>> "[имейл защитен]#$%^&*()" . Потребителят смени оформлението на "български" и трябва да получим съответните знаци (как да разберем). как може да стане това?! Четене на техните стойности от ключовете. . и веднага разберете кога е натиснат клавишът SHIFT . Всичко това ми трябва за виртуалната клавиатура. мога да правя всичко, т.е. клавиатурата ще поддържа само английски, но бих искал всички останали, т.е. комби :)

PS какво ще стане, ако потребителят има арабска подредба? . нужда от гъвкавост.

това

Следните методи могат да се използват при обработка на събитие за натискане на клавиш:KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); KeyPress(Sender: TObject; var Key: Char);

В същото време, като използвате параметъра Shift, можете да намерите информация за състоянието на клавишите за преместване:TShiftState = набор от (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

Или не е това проблемът?

клавиатурата

това

клавиатурата

Всичко . разбрахме смяната. и сега как да разберете стойностите на клавишите на клавиатурата? Например, клавишът с код 111 е "u" или "u" в зависимост от SHIFT'a.

преброим

Например ключът с код 111 е "u" или "u" в зависимост от SHIFT'a.

Тези. разберете какво пише на бутона? - Няма начин. И чрез кода, използвайки кодовата таблица, винаги можете да разберете кой знак е въведен.

процедураTForm1.Button1KeyPress(Sender: TObject; var Key: Char);

begin memo1.Lines.Append(Key+' '+IntToStr(ord(Key)));

procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

-------- Натиснетеw без Shiftw 249 79 ------- Натиснетеw с Shiftw 217 79

KeyPress ни дава кода на знака. Информация за клавишите KeyUp/KeyDown.

клавиатурата

remaxне е съвсем прав, аз съм си виновен, не знам как да изразя идеята си. просто трябва да разберете символа му по кода на ключа, т.е. 217 => W или 249 => sch . но има един проблем, ако направите това: ще бъде проблематично да се създаде виртуална клавиатура и ако е така: мисля, че това е ^^^ по-добре за мен.

Всъщност въпросът е: възможно ли е да разберете неговия символ по кода на ключа? :)

PS Сега успях да формулирам правилно въпроса

това

Цитат
Възможно ли е да разберете неговия символ по кода на ключа?

Монти!Всеки ключ има недвусмислен уникален код. И на 102 клавиатури и на 104 и какви други клавиатури има - всеки клавиш си има персонален код.

В този случай получаваме този код с помощта на KeyUp/KeyDown.

За всеки отделен случай се определя на какво отговаря полученият код. Например сменихте клавиатурната подредба от български на английски в Win. В този случай кодът от клавиша "u" няма да се промени. Въпреки че характерът вече ще бъде различен ("o"). За руски / лат / украински - няма проблеми - знаците на всички езици успешно седят в един комплект - WIN Cyr. Следователно е възможно да се разграничи shShoO без да се анализира Chift чрез събитиетоKeyPres, за да се получи готов символ. Проблемите ще започнат, ако използвате вашия вътрешен превключвател на оформление или ако езиците са от различни кодови набори.

всички

Пак съм неразбран :(

Искам да направя виртуална клавиатура като тази:

Английски без шрифт:

Английски със смяна:

Български без смяна:

Български с шифт: --------------------- Тази програма не е моя и не поддържа български, но на фигурата се вижда, че няма проблеми с клавиатурата. как може да стане това? Просто не мога да си представя и не съм виждал изходния код никъде, няма скромно описание на функциите на API (а трябва да има подобно), но не се притеснявам за това.