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

клавіші

Допустимо розкладка коштує "Англійська" і 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 (а там має бути подібна), а тобі я не турбував.