将字符串转换为 VKCode:不兼容的类型:'Integer' 和 'string'
Convert string to VKCode: Incompatible types: 'Integer' and 'string'
我正在尝试使用 this 引用将字符串转换为 VKCode,但是当尝试编译时,出现以下错误:
E2001 Ordinal type required
E2010 Incompatible types: 'Integer' and 'string'
这意味着 case (expression) of
不是要在此处使用的选项吗?
function VKStringToWord(const aVKstring: string): Word;
begin
if aVKstring = '' then
Exit(0);
case UpperCase(aVKstring) of
'VK_A':
Result := ;
else
Result := 0;
end;
end;
正确,不能对字符串使用 case
。根据 documentation:
selectorExpression
is any expression of an ordinal type
(强调我的)。字符串不是序数类型。
然而,你可以做的是这样的:
function VKStringToWord(const AVKString: string): Word;
const
Data: array[0..192] of record
Key: string;
Val: Word
end =
(
(Key: 'VK_0' ; Val: ),
(Key: 'VK_1' ; Val: ),
(Key: 'VK_2' ; Val: ),
(Key: 'VK_3' ; Val: ),
(Key: 'VK_4' ; Val: ),
(Key: 'VK_5' ; Val: ),
(Key: 'VK_6' ; Val: ),
(Key: 'VK_7' ; Val: ),
(Key: 'VK_8' ; Val: ),
(Key: 'VK_9' ; Val: ),
(Key: 'VK_A' ; Val: ),
(Key: 'VK_ACCEPT' ; Val: 30),
(Key: 'VK_ADD' ; Val: 107),
(Key: 'VK_APPS' ; Val: D),
(Key: 'VK_ATTN' ; Val: $F6),
(Key: 'VK_B' ; Val: ),
(Key: 'VK_BACK' ; Val: 8),
(Key: 'VK_BROWSER_BACK' ; Val: $A6),
(Key: 'VK_BROWSER_FAVORITES' ; Val: $AB),
(Key: 'VK_BROWSER_FORWARD' ; Val: $A7),
(Key: 'VK_BROWSER_HOME' ; Val: $AC),
(Key: 'VK_BROWSER_REFRESH' ; Val: $A8),
(Key: 'VK_BROWSER_SEARCH' ; Val: $AA),
(Key: 'VK_BROWSER_STOP' ; Val: $A9),
(Key: 'VK_C' ; Val: ),
(Key: 'VK_CANCEL' ; Val: 3),
(Key: 'VK_CAPITAL' ; Val: 20),
(Key: 'VK_CLEAR' ; Val: 12),
(Key: 'VK_CONTROL' ; Val: 17),
(Key: 'VK_CONVERT' ; Val: 28),
(Key: 'VK_CRSEL' ; Val: $F7),
(Key: 'VK_D' ; Val: ),
(Key: 'VK_DECIMAL' ; Val: 110),
(Key: 'VK_DELETE' ; Val: 46),
(Key: 'VK_DIVIDE' ; Val: 111),
(Key: 'VK_DOWN' ; Val: 40),
(Key: 'VK_E' ; Val: ),
(Key: 'VK_END' ; Val: 35),
(Key: 'VK_EREOF' ; Val: $F9),
(Key: 'VK_ESCAPE' ; Val: 27),
(Key: 'VK_EXECUTE' ; Val: 43),
(Key: 'VK_EXSEL' ; Val: $F8),
(Key: 'VK_F' ; Val: ),
(Key: 'VK_F1' ; Val: 112),
(Key: 'VK_F10' ; Val: 121),
(Key: 'VK_F11' ; Val: 122),
(Key: 'VK_F12' ; Val: 123),
(Key: 'VK_F13' ; Val: 124),
(Key: 'VK_F14' ; Val: 125),
(Key: 'VK_F15' ; Val: 126),
(Key: 'VK_F16' ; Val: 127),
(Key: 'VK_F17' ; Val: 128),
(Key: 'VK_F18' ; Val: 129),
(Key: 'VK_F19' ; Val: 130),
(Key: 'VK_F2' ; Val: 113),
(Key: 'VK_F20' ; Val: 131),
(Key: 'VK_F21' ; Val: 132),
(Key: 'VK_F22' ; Val: 133),
(Key: 'VK_F23' ; Val: 134),
(Key: 'VK_F24' ; Val: 135),
(Key: 'VK_F3' ; Val: 114),
(Key: 'VK_F4' ; Val: 115),
(Key: 'VK_F5' ; Val: 116),
(Key: 'VK_F6' ; Val: 117),
(Key: 'VK_F7' ; Val: 118),
(Key: 'VK_F8' ; Val: 119),
(Key: 'VK_F9' ; Val: 120),
(Key: 'VK_FINAL' ; Val: 24),
(Key: 'VK_G' ; Val: ),
(Key: 'VK_H' ; Val: ),
(Key: 'VK_HANGUL' ; Val: 21),
(Key: 'VK_HANJA' ; Val: 25),
(Key: 'VK_HELP' ; Val: 47),
(Key: 'VK_HIGHESTVALUE' ; Val: $FFFF),
(Key: 'VK_HOME' ; Val: 36),
(Key: 'VK_I' ; Val: ),
(Key: 'VK_INSERT' ; Val: 45),
(Key: 'VK_J' ; Val: A),
(Key: 'VK_JUNJA' ; Val: 23),
(Key: 'VK_K' ; Val: B),
(Key: 'VK_KANA' ; Val: 21),
(Key: 'VK_KANJI' ; Val: 25),
(Key: 'VK_L' ; Val: C),
(Key: 'VK_LAUNCH_APP1' ; Val: $B6),
(Key: 'VK_LAUNCH_APP2' ; Val: $B7),
(Key: 'VK_LAUNCH_MAIL' ; Val: $B4),
(Key: 'VK_LAUNCH_MEDIA_SELECT' ; Val: $B5),
(Key: 'VK_LBUTTON' ; Val: 1),
(Key: 'VK_LCL_ALT' ; Val: 18),
(Key: 'VK_LCL_AT' ; Val: 3),
(Key: 'VK_LCL_BACKSLASH' ; Val: $DC),
(Key: 'VK_LCL_CALL' ; Val: 1),
(Key: 'VK_LCL_CAPSLOCK' ; Val: 20),
(Key: 'VK_LCL_CLOSE_BRAKET' ; Val: $DD),
(Key: 'VK_LCL_COMMA' ; Val: $BC),
(Key: 'VK_LCL_ENDCALL' ; Val: 2),
(Key: 'VK_LCL_EQUAL' ; Val: $BB),
(Key: 'VK_LCL_LALT' ; Val: $A4),
(Key: 'VK_LCL_MINUS' ; Val: $BD),
(Key: 'VK_LCL_OPEN_BRAKET' ; Val: $DB),
(Key: 'VK_LCL_POINT' ; Val: $BE),
(Key: 'VK_LCL_POWER' ; Val: 0),
(Key: 'VK_LCL_QUOTE' ; Val: $DE),
(Key: 'VK_LCL_RALT' ; Val: $A5),
(Key: 'VK_LCL_SEMI_COMMA' ; Val: $BA),
(Key: 'VK_LCL_SLASH' ; Val: $BF),
(Key: 'VK_LCL_TILDE' ; Val: $C0),
(Key: 'VK_LCONTROL' ; Val: $A2),
(Key: 'VK_LEFT' ; Val: 37),
(Key: 'VK_LMENU' ; Val: $A4),
(Key: 'VK_LSHIFT' ; Val: $A0),
(Key: 'VK_LWIN' ; Val: B),
(Key: 'VK_M' ; Val: D),
(Key: 'VK_MBUTTON' ; Val: 4),
(Key: 'VK_MEDIA_NEXT_TRACK' ; Val: $B0),
(Key: 'VK_MEDIA_PLAY_PAUSE' ; Val: $B3),
(Key: 'VK_MEDIA_PREV_TRACK' ; Val: $B1),
(Key: 'VK_MEDIA_STOP' ; Val: $B2),
(Key: 'VK_MENU' ; Val: 18),
(Key: 'VK_MODECHANGE' ; Val: 31),
(Key: 'VK_MULTIPLY' ; Val: 106),
(Key: 'VK_N' ; Val: E),
(Key: 'VK_NEXT' ; Val: 34),
(Key: 'VK_NONAME' ; Val: $FC),
(Key: 'VK_NONCONVERT' ; Val: 29),
(Key: 'VK_NUMLOCK' ; Val: ),
(Key: 'VK_NUMPAD0' ; Val: 96),
(Key: 'VK_NUMPAD1' ; Val: 97),
(Key: 'VK_NUMPAD2' ; Val: 98),
(Key: 'VK_NUMPAD3' ; Val: 99),
(Key: 'VK_NUMPAD4' ; Val: 100),
(Key: 'VK_NUMPAD5' ; Val: 101),
(Key: 'VK_NUMPAD6' ; Val: 102),
(Key: 'VK_NUMPAD7' ; Val: 103),
(Key: 'VK_NUMPAD8' ; Val: 104),
(Key: 'VK_NUMPAD9' ; Val: 105),
(Key: 'VK_O' ; Val: F),
(Key: 'VK_OEM_1' ; Val: $BA),
(Key: 'VK_OEM_102' ; Val: $E2),
(Key: 'VK_OEM_2' ; Val: $BF),
(Key: 'VK_OEM_3' ; Val: $C0),
(Key: 'VK_OEM_4' ; Val: $DB),
(Key: 'VK_OEM_5' ; Val: $DC),
(Key: 'VK_OEM_6' ; Val: $DD),
(Key: 'VK_OEM_7' ; Val: $DE),
(Key: 'VK_OEM_8' ; Val: $DF),
(Key: 'VK_OEM_CLEAR' ; Val: $FE),
(Key: 'VK_OEM_COMMA' ; Val: $BC),
(Key: 'VK_OEM_MINUS' ; Val: $BD),
(Key: 'VK_OEM_PERIOD' ; Val: $BE),
(Key: 'VK_OEM_PLUS' ; Val: $BB),
(Key: 'VK_P' ; Val: ),
(Key: 'VK_PA1' ; Val: $FD),
(Key: 'VK_PAUSE' ; Val: 19),
(Key: 'VK_PLAY' ; Val: $FA),
(Key: 'VK_PRINT' ; Val: 42),
(Key: 'VK_PRIOR' ; Val: 33),
(Key: 'VK_PROCESSKEY' ; Val: $E7),
(Key: 'VK_Q' ; Val: ),
(Key: 'VK_R' ; Val: ),
(Key: 'VK_RBUTTON' ; Val: 2),
(Key: 'VK_RCONTROL' ; Val: $A3),
(Key: 'VK_RETURN' ; Val: 13),
(Key: 'VK_RIGHT' ; Val: 39),
(Key: 'VK_RMENU' ; Val: $A5),
(Key: 'VK_RSHIFT' ; Val: $A1),
(Key: 'VK_RWIN' ; Val: C),
(Key: 'VK_S' ; Val: ),
(Key: 'VK_SCROLL' ; Val: ),
(Key: 'VK_SELECT' ; Val: 41),
(Key: 'VK_SEPARATOR' ; Val: 108),
(Key: 'VK_SHIFT' ; Val: 16),
(Key: 'VK_SLEEP' ; Val: F),
(Key: 'VK_SNAPSHOT' ; Val: 44),
(Key: 'VK_SPACE' ; Val: 32),
(Key: 'VK_SUBTRACT' ; Val: 109),
(Key: 'VK_T' ; Val: ),
(Key: 'VK_TAB' ; Val: 9),
(Key: 'VK_U' ; Val: ),
(Key: 'VK_UNDEFINED' ; Val: $FF),
(Key: 'VK_UNKNOWN' ; Val: 0),
(Key: 'VK_UP' ; Val: 38),
(Key: 'VK_V' ; Val: ),
(Key: 'VK_VOLUME_DOWN' ; Val: $AE),
(Key: 'VK_VOLUME_MUTE' ; Val: $AD),
(Key: 'VK_VOLUME_UP' ; Val: $AF),
(Key: 'VK_W' ; Val: ),
(Key: 'VK_X' ; Val: ),
(Key: 'VK_XBUTTON1' ; Val: 5),
(Key: 'VK_XBUTTON2' ; Val: 6),
(Key: 'VK_Y' ; Val: ),
(Key: 'VK_Z' ; Val: A),
(Key: 'VK_ZOOM' ; Val: $FB)
);
begin
for var VK in Data do
if SameText(VK.Key, AVKString) then
Exit(VK.Val);
Result := 0;
end;
我正在尝试使用 this 引用将字符串转换为 VKCode,但是当尝试编译时,出现以下错误:
E2001 Ordinal type required
E2010 Incompatible types: 'Integer' and 'string'
这意味着 case (expression) of
不是要在此处使用的选项吗?
function VKStringToWord(const aVKstring: string): Word;
begin
if aVKstring = '' then
Exit(0);
case UpperCase(aVKstring) of
'VK_A':
Result := ;
else
Result := 0;
end;
end;
正确,不能对字符串使用 case
。根据 documentation:
selectorExpression
is any expression of an ordinal type
(强调我的)。字符串不是序数类型。
然而,你可以做的是这样的:
function VKStringToWord(const AVKString: string): Word;
const
Data: array[0..192] of record
Key: string;
Val: Word
end =
(
(Key: 'VK_0' ; Val: ),
(Key: 'VK_1' ; Val: ),
(Key: 'VK_2' ; Val: ),
(Key: 'VK_3' ; Val: ),
(Key: 'VK_4' ; Val: ),
(Key: 'VK_5' ; Val: ),
(Key: 'VK_6' ; Val: ),
(Key: 'VK_7' ; Val: ),
(Key: 'VK_8' ; Val: ),
(Key: 'VK_9' ; Val: ),
(Key: 'VK_A' ; Val: ),
(Key: 'VK_ACCEPT' ; Val: 30),
(Key: 'VK_ADD' ; Val: 107),
(Key: 'VK_APPS' ; Val: D),
(Key: 'VK_ATTN' ; Val: $F6),
(Key: 'VK_B' ; Val: ),
(Key: 'VK_BACK' ; Val: 8),
(Key: 'VK_BROWSER_BACK' ; Val: $A6),
(Key: 'VK_BROWSER_FAVORITES' ; Val: $AB),
(Key: 'VK_BROWSER_FORWARD' ; Val: $A7),
(Key: 'VK_BROWSER_HOME' ; Val: $AC),
(Key: 'VK_BROWSER_REFRESH' ; Val: $A8),
(Key: 'VK_BROWSER_SEARCH' ; Val: $AA),
(Key: 'VK_BROWSER_STOP' ; Val: $A9),
(Key: 'VK_C' ; Val: ),
(Key: 'VK_CANCEL' ; Val: 3),
(Key: 'VK_CAPITAL' ; Val: 20),
(Key: 'VK_CLEAR' ; Val: 12),
(Key: 'VK_CONTROL' ; Val: 17),
(Key: 'VK_CONVERT' ; Val: 28),
(Key: 'VK_CRSEL' ; Val: $F7),
(Key: 'VK_D' ; Val: ),
(Key: 'VK_DECIMAL' ; Val: 110),
(Key: 'VK_DELETE' ; Val: 46),
(Key: 'VK_DIVIDE' ; Val: 111),
(Key: 'VK_DOWN' ; Val: 40),
(Key: 'VK_E' ; Val: ),
(Key: 'VK_END' ; Val: 35),
(Key: 'VK_EREOF' ; Val: $F9),
(Key: 'VK_ESCAPE' ; Val: 27),
(Key: 'VK_EXECUTE' ; Val: 43),
(Key: 'VK_EXSEL' ; Val: $F8),
(Key: 'VK_F' ; Val: ),
(Key: 'VK_F1' ; Val: 112),
(Key: 'VK_F10' ; Val: 121),
(Key: 'VK_F11' ; Val: 122),
(Key: 'VK_F12' ; Val: 123),
(Key: 'VK_F13' ; Val: 124),
(Key: 'VK_F14' ; Val: 125),
(Key: 'VK_F15' ; Val: 126),
(Key: 'VK_F16' ; Val: 127),
(Key: 'VK_F17' ; Val: 128),
(Key: 'VK_F18' ; Val: 129),
(Key: 'VK_F19' ; Val: 130),
(Key: 'VK_F2' ; Val: 113),
(Key: 'VK_F20' ; Val: 131),
(Key: 'VK_F21' ; Val: 132),
(Key: 'VK_F22' ; Val: 133),
(Key: 'VK_F23' ; Val: 134),
(Key: 'VK_F24' ; Val: 135),
(Key: 'VK_F3' ; Val: 114),
(Key: 'VK_F4' ; Val: 115),
(Key: 'VK_F5' ; Val: 116),
(Key: 'VK_F6' ; Val: 117),
(Key: 'VK_F7' ; Val: 118),
(Key: 'VK_F8' ; Val: 119),
(Key: 'VK_F9' ; Val: 120),
(Key: 'VK_FINAL' ; Val: 24),
(Key: 'VK_G' ; Val: ),
(Key: 'VK_H' ; Val: ),
(Key: 'VK_HANGUL' ; Val: 21),
(Key: 'VK_HANJA' ; Val: 25),
(Key: 'VK_HELP' ; Val: 47),
(Key: 'VK_HIGHESTVALUE' ; Val: $FFFF),
(Key: 'VK_HOME' ; Val: 36),
(Key: 'VK_I' ; Val: ),
(Key: 'VK_INSERT' ; Val: 45),
(Key: 'VK_J' ; Val: A),
(Key: 'VK_JUNJA' ; Val: 23),
(Key: 'VK_K' ; Val: B),
(Key: 'VK_KANA' ; Val: 21),
(Key: 'VK_KANJI' ; Val: 25),
(Key: 'VK_L' ; Val: C),
(Key: 'VK_LAUNCH_APP1' ; Val: $B6),
(Key: 'VK_LAUNCH_APP2' ; Val: $B7),
(Key: 'VK_LAUNCH_MAIL' ; Val: $B4),
(Key: 'VK_LAUNCH_MEDIA_SELECT' ; Val: $B5),
(Key: 'VK_LBUTTON' ; Val: 1),
(Key: 'VK_LCL_ALT' ; Val: 18),
(Key: 'VK_LCL_AT' ; Val: 3),
(Key: 'VK_LCL_BACKSLASH' ; Val: $DC),
(Key: 'VK_LCL_CALL' ; Val: 1),
(Key: 'VK_LCL_CAPSLOCK' ; Val: 20),
(Key: 'VK_LCL_CLOSE_BRAKET' ; Val: $DD),
(Key: 'VK_LCL_COMMA' ; Val: $BC),
(Key: 'VK_LCL_ENDCALL' ; Val: 2),
(Key: 'VK_LCL_EQUAL' ; Val: $BB),
(Key: 'VK_LCL_LALT' ; Val: $A4),
(Key: 'VK_LCL_MINUS' ; Val: $BD),
(Key: 'VK_LCL_OPEN_BRAKET' ; Val: $DB),
(Key: 'VK_LCL_POINT' ; Val: $BE),
(Key: 'VK_LCL_POWER' ; Val: 0),
(Key: 'VK_LCL_QUOTE' ; Val: $DE),
(Key: 'VK_LCL_RALT' ; Val: $A5),
(Key: 'VK_LCL_SEMI_COMMA' ; Val: $BA),
(Key: 'VK_LCL_SLASH' ; Val: $BF),
(Key: 'VK_LCL_TILDE' ; Val: $C0),
(Key: 'VK_LCONTROL' ; Val: $A2),
(Key: 'VK_LEFT' ; Val: 37),
(Key: 'VK_LMENU' ; Val: $A4),
(Key: 'VK_LSHIFT' ; Val: $A0),
(Key: 'VK_LWIN' ; Val: B),
(Key: 'VK_M' ; Val: D),
(Key: 'VK_MBUTTON' ; Val: 4),
(Key: 'VK_MEDIA_NEXT_TRACK' ; Val: $B0),
(Key: 'VK_MEDIA_PLAY_PAUSE' ; Val: $B3),
(Key: 'VK_MEDIA_PREV_TRACK' ; Val: $B1),
(Key: 'VK_MEDIA_STOP' ; Val: $B2),
(Key: 'VK_MENU' ; Val: 18),
(Key: 'VK_MODECHANGE' ; Val: 31),
(Key: 'VK_MULTIPLY' ; Val: 106),
(Key: 'VK_N' ; Val: E),
(Key: 'VK_NEXT' ; Val: 34),
(Key: 'VK_NONAME' ; Val: $FC),
(Key: 'VK_NONCONVERT' ; Val: 29),
(Key: 'VK_NUMLOCK' ; Val: ),
(Key: 'VK_NUMPAD0' ; Val: 96),
(Key: 'VK_NUMPAD1' ; Val: 97),
(Key: 'VK_NUMPAD2' ; Val: 98),
(Key: 'VK_NUMPAD3' ; Val: 99),
(Key: 'VK_NUMPAD4' ; Val: 100),
(Key: 'VK_NUMPAD5' ; Val: 101),
(Key: 'VK_NUMPAD6' ; Val: 102),
(Key: 'VK_NUMPAD7' ; Val: 103),
(Key: 'VK_NUMPAD8' ; Val: 104),
(Key: 'VK_NUMPAD9' ; Val: 105),
(Key: 'VK_O' ; Val: F),
(Key: 'VK_OEM_1' ; Val: $BA),
(Key: 'VK_OEM_102' ; Val: $E2),
(Key: 'VK_OEM_2' ; Val: $BF),
(Key: 'VK_OEM_3' ; Val: $C0),
(Key: 'VK_OEM_4' ; Val: $DB),
(Key: 'VK_OEM_5' ; Val: $DC),
(Key: 'VK_OEM_6' ; Val: $DD),
(Key: 'VK_OEM_7' ; Val: $DE),
(Key: 'VK_OEM_8' ; Val: $DF),
(Key: 'VK_OEM_CLEAR' ; Val: $FE),
(Key: 'VK_OEM_COMMA' ; Val: $BC),
(Key: 'VK_OEM_MINUS' ; Val: $BD),
(Key: 'VK_OEM_PERIOD' ; Val: $BE),
(Key: 'VK_OEM_PLUS' ; Val: $BB),
(Key: 'VK_P' ; Val: ),
(Key: 'VK_PA1' ; Val: $FD),
(Key: 'VK_PAUSE' ; Val: 19),
(Key: 'VK_PLAY' ; Val: $FA),
(Key: 'VK_PRINT' ; Val: 42),
(Key: 'VK_PRIOR' ; Val: 33),
(Key: 'VK_PROCESSKEY' ; Val: $E7),
(Key: 'VK_Q' ; Val: ),
(Key: 'VK_R' ; Val: ),
(Key: 'VK_RBUTTON' ; Val: 2),
(Key: 'VK_RCONTROL' ; Val: $A3),
(Key: 'VK_RETURN' ; Val: 13),
(Key: 'VK_RIGHT' ; Val: 39),
(Key: 'VK_RMENU' ; Val: $A5),
(Key: 'VK_RSHIFT' ; Val: $A1),
(Key: 'VK_RWIN' ; Val: C),
(Key: 'VK_S' ; Val: ),
(Key: 'VK_SCROLL' ; Val: ),
(Key: 'VK_SELECT' ; Val: 41),
(Key: 'VK_SEPARATOR' ; Val: 108),
(Key: 'VK_SHIFT' ; Val: 16),
(Key: 'VK_SLEEP' ; Val: F),
(Key: 'VK_SNAPSHOT' ; Val: 44),
(Key: 'VK_SPACE' ; Val: 32),
(Key: 'VK_SUBTRACT' ; Val: 109),
(Key: 'VK_T' ; Val: ),
(Key: 'VK_TAB' ; Val: 9),
(Key: 'VK_U' ; Val: ),
(Key: 'VK_UNDEFINED' ; Val: $FF),
(Key: 'VK_UNKNOWN' ; Val: 0),
(Key: 'VK_UP' ; Val: 38),
(Key: 'VK_V' ; Val: ),
(Key: 'VK_VOLUME_DOWN' ; Val: $AE),
(Key: 'VK_VOLUME_MUTE' ; Val: $AD),
(Key: 'VK_VOLUME_UP' ; Val: $AF),
(Key: 'VK_W' ; Val: ),
(Key: 'VK_X' ; Val: ),
(Key: 'VK_XBUTTON1' ; Val: 5),
(Key: 'VK_XBUTTON2' ; Val: 6),
(Key: 'VK_Y' ; Val: ),
(Key: 'VK_Z' ; Val: A),
(Key: 'VK_ZOOM' ; Val: $FB)
);
begin
for var VK in Data do
if SameText(VK.Key, AVKString) then
Exit(VK.Val);
Result := 0;
end;