Як рахувати всі символи з клавіатури

Допустимо розкладка коштує "Англійська" і SHIFT не затиснутий, програма зчитує символи, присвоюючи кожному буттону певний символ із певною клавішею . користувач натиснув SHIFT і літери перейшли у верхній регістр та відповідно "1234567890" =>> "[email protected]#$%^&*()" . Користувач переключив розкладку на "українську" і ми повинні отримати відповідні символи (як би дізнатися). ось як таке можна зробити? Вважаючи з клавіш їх значення . . і відразу дізнаватися коли була натиснута клавіша 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 = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Чи проблема не в цьому?



Всі . з шифтом ми розібралися. а тепер як дізнатися значення клавіш клавіатури? Наприклад клавіша з кодом 111 це "щ" або "Щ" залежно від SHIFT'a.

Наприклад, клавіша з кодом 111 це "щ" або "Щ" залежно від SHIFT'a .
Тобто. дізнатися, що написано на кнопці? - Ніяк. А за кодом із використанням кодової таблиці завжди можна дізнатися який символ вводився.
procedureTForm1.Button1KeyPress(Sender: TObject; var Key: Char);
begin memo1.Lines.Append(Key+' '+IntToStr(ord(Key)));
procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
-------- Натискаємощ без Shiftщ 249 79 -------- Натискаємощ c ShiftЩ 217 79
KeyPress дає нам код символу. KeyUp/KeyDown інформацію про клавіші.

remaxне зовсім так, я сам винен, не вмію висловити свою ідею. треба лише дізнатися за кодом кнопки її знак тобто. 217 => Щ або 249 => щ. але є одна проблемка, якщо робити так: буде проблематично побудувати віртуальну клавіатуру, а якщо так: думаю що так ^^^ краще мені.
Власне питання: чи можна дізнатися за кодом клавіші символ? :)
PS тепер мені вдалося сформулювати питання як треба

| Цитата |
| Чи можна дізнатися за кодом клавіші символ? |
Monty!Кожна клавіша має однозначний, унікальний код. І на 102 клавішних і на 104 і які ще там бувають клавіатури - у кожної клавіші свій особистий код.
У даному випадку цей код ми отримуємо використовуючи KeyUp/KeyDown.
Чому отриманий код відповідає визначається кожному конкретному випадку. Наприклад, Ви у Win змінили розкладку клавіатури з української на англійську. При цьому код із клавіші "щ" не зміниться. Хоча символ вже буде інший ("o"). Для рус/лат/укр – проблем немає – символи всіх мов успішно сидять в одному наборі – WIN Cyr. Тому розрізняти щЩО можна без аналізу Chift за подієюKeyPresотримати готовий символ. Проблеми почнуться якщо Ви будете використовувати свій внутрішній перемикач розкладок або мови будуть з різних кодових наборів.

Знову мене не зрозуміли: (
Я хочу зробити віртуальну клавіатуру подібно до неї:
Англійська без шифту:
Англійська з шифтом:
українська без шифту:
українська з шифтом: ---------------------------- Та програма не моя і вона не підтримує українську , але малюнку видно що проблем із клавіатурою в неї немає . ось як це можна зробити? я просто не можу уявити і ні де не бачив вихідників, немає жодного скромного опису функцій API (а там має бути подібна), а тобі я не турбував.