(* Name: VKeyChars Copyright: Copyright (C) SIL International. Documentation: Description: Create Date: 6 Apr 2010 Modified Date: 6 Apr 2010 Authors: mcdurdin Related Files: Dependencies: Bugs: Todo: Notes: History: 06 Apr 2010 - mcdurdin - I2200 - Mnemonic layouts and OSK *) unit VKeyChars; interface const SUSVkeyChars: array[0..1,0..255] of Char = ( ( #$0, //'??00', // &H0 #$0, //'?Left Mouse Button', // &H1 #$0, //'?Right Mouse Button', // &H2 #$0, //'?Ctrl+Break', // &H3 #$0, //'?Middle Mouse Button', // &H4 #$0, //'?05', // &H5 #$0, //'?06', // &H6 #$0, //'?07', // &H7 #$8, //'Backspace', // &H8 #$9, //'Tab', // &H9 #$0, //'?0A', // &HA #$0, //'?0B', // &HB #$0, //'Key Pad 5', // &HC #$D, //'Enter', // &HD #$0, //'??0E', // &HE #$0, //'??0F', // &HF #$0, //'??Shift', // &H10 #$0, //'??Control', // &H11 #$0, //'??Alt', // &H12 #$0, //'?Pause', // &H13 #$0, //'??Caps Lock', // &H14 #$0, //'??KANJI?15', // &H15 #$0, //'??KANJI?16', // &H16 #$0, //'??KANJI?17', // &H17 #$0, //'??KANJI?18', // &H18 #$0, //'??KANJI?19', // &H19 #$0, //'??1A', // &H1A #$1B, //'Escape', // &H1B #$0, //'??KANJI?1C', // &H1C #$0, //'??KANJI?1D', // &H1D #$0, //'??KANJI?1E', // &H1E #$0, //'??KANJI?1F', // &H1F ' ', //'Spacebar', // &H20 #$0, //'?Page Up', // &H21 #$0, //'?Page Down', // &H22 #$0, //'?End', // &H23 #$0, //'?Home', // &H24 #$0, //'?Left Arrow', // &H25 #$0, //'?Up Arrow', // &H26 #$0, //'?Right Arrow', // &H27 #$0, //'?Down Arrow', // &H28 #$0, //'??Select', // &H29 #$0, //'??PRINT', // &H2A #$0, //'??Execute', // &H2B #$0, //'?Print Screen', // &H2C #$0, //'?Insert', // &H2D #$0, //'?Delete', // &H2E #$0, //'??Help', // &H2F '0', // &H30 '1', // &H31 '2', // &H32 '3', // &H33 '4', // &H34 '5', // &H35 '6', // &H36 '7', // &H37 '8', // &H38 '9', // &H39 #$0, //'??3A', // &H3A #$0, //'??3B', // &H3B #$0, //'??3C', // &H3C #$0, //'??3D', // &H3D #$0, //'??3E', // &H3E #$0, //'??3F', // &H3F #$0, //'??40', // &H40 'a', // &H41 'b', // &H42 'c', // &H43 'd', // &H44 'e', // &H45 'f', // &H46 'g', // &H47 'h', // &H48 'i', // &H49 'j', // &H4A 'k', // &H4B 'l', // &H4C 'm', // &H4D 'n', // &H4E 'o', // &H4F 'p', // &H50 'q', // &H51 'r', // &H52 's', // &H53 't', // &H54 'u', // &H55 'v', // &H56 'w', // &h57 'x', // &H58 'y', // &H59 'z', // &H5A #$0, //'??5B', // &H5B #$0, //'??5C', // &H5C #$0, //'??5D', // &H5D #$0, //'??5E', // &H5E #$0, //'??5F', // &H5F #$0, //'?Number Pad 0', // &H60 #$0, //'?Number Pad 1', // &H61 #$0, //'?Number Pad 2', // &H62 #$0, //'?Number Pad 3', // &H63 #$0, //'?Number Pad 4', // &H64 #$0, //'?Number Pad 5', // &H65 #$0, //'?Number Pad 6', // &H66 #$0, //'?Number Pad 7', // &H67 #$0, //'?Number Pad 8', // &H68 #$0, //'?Number Pad 9', // &H69 #$0, //'?Number Pad *', // &H6A #$0, //'?Number Pad +', // &H6B #$0, //'??Separator', // &H6C #$0, //'?Number Pad -', // &H6D #$0, //'?Number Pad .', // &H6E #$0, //'?Number Pad /', // &H6F #$0, //'?F1', // &H70 #$0, //'?F2', // &H71 #$0, //'?F3', // &H72 #$0, //'?F4', // &H73 #$0, //'?F5', // &H74 #$0, //'?F6', // &H75 #$0, //'?F7', // &H76 #$0, //'?F8', // &H77 #$0, //'?F9', // &H78 #$0, //'?F10', // &H79 #$0, //'?F11', // &H7A #$0, //'?F12', // &H7B #$0, //'??F13', // &H7C #$0, //'??F14', // &H7D #$0, //'??F15', // &H7E #$0, //'??F16', // &H7F #$0, //'??F17', // &H80 #$0, //'??F18', // &H81 #$0, //'??F19', // &H82 #$0, //'??F20', // &H83 #$0, //'??F21', // &H84 #$0, //'??F22', // &H85 #$0, //'??F23', // &H86 #$0, //'??F24', // &H87 #$0, //'??88', // &H88 #$0, //'??89', // &H89 #$0, //'??8A', // &H8A #$0, //'??8B', // &H8B #$0, //'??8C', // &H8C #$0, //'??8D', // &H8D #$0, //'??8E', // &H8E #$0, //'??8F', // &H8F #$0, //'??Num Lock', // &H90 #$0, //'??Scroll Lock', // &H91 #$0, //'?92', // &H92 #$0, //'?93', // &H93 #$0, //'?94', // &H94 #$0, //'?95', // &H95 #$0, //'?96', // &H96 #$0, //'?97', // &H97 #$0, //'?98', // &H98 #$0, //'?99', // &H99 #$0, //'?9A', // &H9A #$0, //'?9B', // &H9B #$0, //'?9C', // &H9C #$0, //'?9D', // &H9D #$0, //'?9E', // &H9E #$0, //'?9F', // &H9F #$0, //'?A0', // &HA0 #$0, //'?A1', // &HA1 #$0, //'?A2', // &HA2 #$0, //'?A3', // &HA3 #$0, //'?A4', // &HA4 #$0, //'?A5', // &HA5 #$0, //'?A6', // &HA6 #$0, //'?A7', // &HA7 #$0, //'?A8', // &HA8 #$0, //'?A9', // &HA9 #$0, //'?AA', // &HAA #$0, //'?AB', // &HAB #$0, //'?AC', // &HAC #$0, //'?AD', // &HAD #$0, //'?AE', // &HAE #$0, //'?AF', // &HAF #$0, //'?B0', // &HB0 #$0, //'?B1', // &HB1 #$0, //'?B2', // &HB2 #$0, //'?B3', // &HB3 #$0, //'?B4', // &HB4 #$0, //'?B5', // &HB5 #$0, //'?B6', // &HB6 #$0, //'?B7', // &HB7 #$0, //'?B8', // &HB8 #$0, //'?B9', // &HB9 ';', // &HBA '=', // &HBB ',', // &HBC '-', // &HBD '.', // &HBE '/', // &HBF '`', // &HC0 #$0, //'??C1', // &HC1 #$0, //'??C2', // &HC2 #$0, //'??C3', // &HC3 #$0, //'??C4', // &HC4 #$0, //'??C5', // &HC5 #$0, //'??C6', // &HC6 #$0, //'??C7', // &HC7 #$0, //'??C8', // &HC8 #$0, //'??C9', // &HC9 #$0, //'??CA', // &HCA #$0, //'??CB', // &HCB #$0, //'??CC', // &HCC #$0, //'??CD', // &HCD #$0, //'??CE', // &HCE #$0, //'??CF', // &HCF #$0, //'??D0', // &HD0 #$0, //'??D1', // &HD1 #$0, //'??D2', // &HD2 #$0, //'??D3', // &HD3 #$0, //'??D4', // &HD4 #$0, //'??D5', // &HD5 #$0, //'??D6', // &HD6 #$0, //'??D7', // &HD7 #$0, //'??D8', // &HD8 #$0, //'??D9', // &HD9 #$0, //'??DA', // &HDA '[', // &HDB '\', // &HDC ']', // &HDD '''', // &HDE #$0, //'??DF', // &HDF #$0, //'??E0', // &HE0 #$0, //'??E1', // &HE1 #$0, //'??E2', // &HE2 102nd key #$0, //'??E3', // &HE3 #$0, //'??E4', // &HE4 #$0, //'??E5', // &HE5 #$0, //'??E6', // &HE6 #$0, //'??E7', // &HE7 #$0, //'??E8', // &HE8 #$0, //'??E9', // &HE9 #$0, //'??EA', // &HEA #$0, //'??EB', // &HEB #$0, //'??EC', // &HEC #$0, //'??ED', // &HED #$0, //'??EE', // &HEE #$0, //'??EF', // &HEF #$0, //'??F0', // &HF0 #$0, //'??F1', // &HF1 #$0, //'??F2', // &HF2 #$0, //'??F3', // &HF3 #$0, //'??F4', // &HF4 #$0, //'??F5', // &HF5 #$0, //'??F6', // &HF6 #$0, //'??F7', // &HF7 #$0, //'??F8', // &HF8 #$0, //'??F9', // &HF9 #$0, //'??FA', // &HFA #$0, //'??FB', // &HFB #$0, //'??FC', // &HFC #$0, //'??FD', // &HFD #$0, //'??FE', // &HFE #$0 //'??FF' // &HFF ), ( #$0, //'??00', // &H0 #$0, //'?Left Mouse Button', // &H1 #$0, //'?Right Mouse Button', // &H2 #$0, //'?Ctrl+Break', // &H3 #$0, //'?Middle Mouse Button', // &H4 #$0, //'?05', // &H5 #$0, //'?06', // &H6 #$0, //'?07', // &H7 #$8, //'Backspace', // &H8 #$9, //'Tab', // &H9 #$0, //'?0A', // &HA #$0, //'?0B', // &HB #$0, //'Key Pad 5', // &HC #$D, //'Enter', // &HD #$0, //'??0E', // &HE #$0, //'??0F', // &HF #$0, //'??Shift', // &H10 #$0, //'??Control', // &H11 #$0, //'??Alt', // &H12 #$0, //'?Pause', // &H13 #$0, //'??Caps Lock', // &H14 #$0, //'??KANJI?15', // &H15 #$0, //'??KANJI?16', // &H16 #$0, //'??KANJI?17', // &H17 #$0, //'??KANJI?18', // &H18 #$0, //'??KANJI?19', // &H19 #$0, //'??1A', // &H1A #$1B, //'Escape', // &H1B #$0, //'??KANJI?1C', // &H1C #$0, //'??KANJI?1D', // &H1D #$0, //'??KANJI?1E', // &H1E #$0, //'??KANJI?1F', // &H1F ' ', //'Spacebar', // &H20 #$0, //'?Page Up', // &H21 #$0, //'?Page Down', // &H22 #$0, //'?End', // &H23 #$0, //'?Home', // &H24 #$0, //'?Left Arrow', // &H25 #$0, //'?Up Arrow', // &H26 #$0, //'?Right Arrow', // &H27 #$0, //'?Down Arrow', // &H28 #$0, //'??Select', // &H29 #$0, //'??PRINT', // &H2A #$0, //'??Execute', // &H2B #$0, //'?Print Screen', // &H2C #$0, //'?Insert', // &H2D #$0, //'?Delete', // &H2E #$0, //'??Help', // &H2F ')', // &H30 '!', // &H31 '@', // &H32 '#', // &H33 '$', // &H34 '%', // &H35 '^', // &H36 '&', // &H37 '*', // &H38 '(', // &H39 #$0, //'??3A', // &H3A #$0, //'??3B', // &H3B #$0, //'??3C', // &H3C #$0, //'??3D', // &H3D #$0, //'??3E', // &H3E #$0, //'??3F', // &H3F #$0, //'??40', // &H40 'A', // &H41 'B', // &H42 'C', // &H43 'D', // &H44 'E', // &H45 'F', // &H46 'G', // &H47 'H', // &H48 'I', // &H49 'J', // &H4A 'K', // &H4B 'L', // &H4C 'M', // &H4D 'N', // &H4E 'O', // &H4F 'P', // &H50 'Q', // &H51 'R', // &H52 'S', // &H53 'T', // &H54 'U', // &H55 'V', // &H56 'W', // &h57 'X', // &H58 'Y', // &H59 'Z', // &H5A #$0, //'??5B', // &H5B #$0, //'??5C', // &H5C #$0, //'??5D', // &H5D #$0, //'??5E', // &H5E #$0, //'??5F', // &H5F #$0, //'?Number Pad 0', // &H60 #$0, //'?Number Pad 1', // &H61 #$0, //'?Number Pad 2', // &H62 #$0, //'?Number Pad 3', // &H63 #$0, //'?Number Pad 4', // &H64 #$0, //'?Number Pad 5', // &H65 #$0, //'?Number Pad 6', // &H66 #$0, //'?Number Pad 7', // &H67 #$0, //'?Number Pad 8', // &H68 #$0, //'?Number Pad 9', // &H69 #$0, //'?Number Pad *', // &H6A #$0, //'?Number Pad +', // &H6B #$0, //'??Separator', // &H6C #$0, //'?Number Pad -', // &H6D #$0, //'?Number Pad .', // &H6E #$0, //'?Number Pad /', // &H6F #$0, //'?F1', // &H70 #$0, //'?F2', // &H71 #$0, //'?F3', // &H72 #$0, //'?F4', // &H73 #$0, //'?F5', // &H74 #$0, //'?F6', // &H75 #$0, //'?F7', // &H76 #$0, //'?F8', // &H77 #$0, //'?F9', // &H78 #$0, //'?F10', // &H79 #$0, //'?F11', // &H7A #$0, //'?F12', // &H7B #$0, //'??F13', // &H7C #$0, //'??F14', // &H7D #$0, //'??F15', // &H7E #$0, //'??F16', // &H7F #$0, //'??F17', // &H80 #$0, //'??F18', // &H81 #$0, //'??F19', // &H82 #$0, //'??F20', // &H83 #$0, //'??F21', // &H84 #$0, //'??F22', // &H85 #$0, //'??F23', // &H86 #$0, //'??F24', // &H87 #$0, //'??88', // &H88 #$0, //'??89', // &H89 #$0, //'??8A', // &H8A #$0, //'??8B', // &H8B #$0, //'??8C', // &H8C #$0, //'??8D', // &H8D #$0, //'??8E', // &H8E #$0, //'??8F', // &H8F #$0, //'??Num Lock', // &H90 #$0, //'??Scroll Lock', // &H91 #$0, //'?92', // &H92 #$0, //'?93', // &H93 #$0, //'?94', // &H94 #$0, //'?95', // &H95 #$0, //'?96', // &H96 #$0, //'?97', // &H97 #$0, //'?98', // &H98 #$0, //'?99', // &H99 #$0, //'?9A', // &H9A #$0, //'?9B', // &H9B #$0, //'?9C', // &H9C #$0, //'?9D', // &H9D #$0, //'?9E', // &H9E #$0, //'?9F', // &H9F #$0, //'?A0', // &HA0 #$0, //'?A1', // &HA1 #$0, //'?A2', // &HA2 #$0, //'?A3', // &HA3 #$0, //'?A4', // &HA4 #$0, //'?A5', // &HA5 #$0, //'?A6', // &HA6 #$0, //'?A7', // &HA7 #$0, //'?A8', // &HA8 #$0, //'?A9', // &HA9 #$0, //'?AA', // &HAA #$0, //'?AB', // &HAB #$0, //'?AC', // &HAC #$0, //'?AD', // &HAD #$0, //'?AE', // &HAE #$0, //'?AF', // &HAF #$0, //'?B0', // &HB0 #$0, //'?B1', // &HB1 #$0, //'?B2', // &HB2 #$0, //'?B3', // &HB3 #$0, //'?B4', // &HB4 #$0, //'?B5', // &HB5 #$0, //'?B6', // &HB6 #$0, //'?B7', // &HB7 #$0, //'?B8', // &HB8 #$0, //'?B9', // &HB9 ':', // &HBA '+', // &HBB '<', // &HBC '_', // &HBD '>', // &HBE '?', // &HBF '~', // &HC0 #$0, //'??C1', // &HC1 #$0, //'??C2', // &HC2 #$0, //'??C3', // &HC3 #$0, //'??C4', // &HC4 #$0, //'??C5', // &HC5 #$0, //'??C6', // &HC6 #$0, //'??C7', // &HC7 #$0, //'??C8', // &HC8 #$0, //'??C9', // &HC9 #$0, //'??CA', // &HCA #$0, //'??CB', // &HCB #$0, //'??CC', // &HCC #$0, //'??CD', // &HCD #$0, //'??CE', // &HCE #$0, //'??CF', // &HCF #$0, //'??D0', // &HD0 #$0, //'??D1', // &HD1 #$0, //'??D2', // &HD2 #$0, //'??D3', // &HD3 #$0, //'??D4', // &HD4 #$0, //'??D5', // &HD5 #$0, //'??D6', // &HD6 #$0, //'??D7', // &HD7 #$0, //'??D8', // &HD8 #$0, //'??D9', // &HD9 #$0, //'??DA', // &HDA '{', // &HDB '|', // &HDC '}', // &HDD '"', // &HDE #$0, //'??DF', // &HDF #$0, //'??E0', // &HE0 #$0, //'??E1', // &HE1 #$0, //'??E2', // &HE2 #$0, //'??E3', // &HE3 #$0, //'??E4', // &HE4 #$0, //'??E5', // &HE5 #$0, //'??E6', // &HE6 #$0, //'??E7', // &HE7 #$0, //'??E8', // &HE8 #$0, //'??E9', // &HE9 #$0, //'??EA', // &HEA #$0, //'??EB', // &HEB #$0, //'??EC', // &HEC #$0, //'??ED', // &HED #$0, //'??EE', // &HEE #$0, //'??EF', // &HEF #$0, //'??F0', // &HF0 #$0, //'??F1', // &HF1 #$0, //'??F2', // &HF2 #$0, //'??F3', // &HF3 #$0, //'??F4', // &HF4 #$0, //'??F5', // &HF5 #$0, //'??F6', // &HF6 #$0, //'??F7', // &HF7 #$0, //'??F8', // &HF8 #$0, //'??F9', // &HF9 #$0, //'??FA', // &HFA #$0, //'??FB', // &HFB #$0, //'??FC', // &HFC #$0, //'??FD', // &HFD #$0, //'??FE', // &HFE #$0 //'??FF' // &HFF )); type TUSVKey = record IsShift: Boolean; VKey: Word; end; function CharToUSVKey(ch: AnsiChar): TUSVKey; implementation var _CharToUSVKey: array[0..127] of TUSVKey; _Initialized: Boolean = False; procedure Init; forward; function CharToUSVKey(ch: AnsiChar): TUSVKey; begin if Ord(ch) > 127 then begin Result.VKey := 0; Result.IsShift := False; Exit; end; if not _Initialized then Init; Result := _CharToUSVKey[Ord(ch)]; end; procedure Init; var shift, vk: Integer; ch: Char; begin _Initialized := True; for shift := 0 to 1 do begin for vk := 0 to 255 do begin ch := SUSVkeyChars[shift, vk]; if ch <> #0 then begin _CharToUSVKey[Ord(ch)].IsShift := shift = 1; _CharToUSVKey[Ord(ch)].VKey := vk; end; end; end; end; end.