Files
HeidiSQL/source/vktable.pas
Ansgar Becker 637d2d6578 feat: finalize keyboard shortcut customization in preferences
Applies a modified shortcut in tree.OnFocusChanging, which is also triggered by Apply
2025-12-01 12:01:20 +01:00

242 lines
11 KiB
ObjectPascal

unit vktable;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, LCLType;
type
TVirtualKeyInfo = record
Code: Word;
Name: string;
end;
function GetVKIndexByCode(Code: Word): Integer;
procedure GetVKNames(Items: TStrings);
const
VKcodes: array[0..192] of TVirtualKeyInfo = (
(Code: VK_UNKNOWN; Name: 'UNKNOWN'),
(Code: VK_LBUTTON; Name: 'LBUTTON'),
(Code: VK_RBUTTON; Name: 'RBUTTON'),
(Code: VK_CANCEL; Name: 'CANCEL'),
(Code: VK_MBUTTON; Name: 'MBUTTON'),
(Code: VK_XBUTTON1; Name: 'XBUTTON1'),
(Code: VK_XBUTTON2; Name: 'XBUTTON2'),
(Code: VK_BACK; Name: 'BACK'),
(Code: VK_TAB; Name: 'TAB'),
(Code: VK_CLEAR; Name: 'CLEAR'),
(Code: VK_RETURN; Name: 'RETURN'),
(Code: VK_SHIFT; Name: 'SHIFT'),
(Code: VK_CONTROL; Name: 'CONTROL'),
(Code: VK_MENU; Name: 'MENU'),
(Code: VK_PAUSE; Name: 'PAUSE'),
(Code: VK_CAPITAL; Name: 'CAPITAL'),
(Code: VK_KANA; Name: 'KANA'),
(Code: VK_HANGUL; Name: 'HANGUL'),
(Code: VK_JUNJA; Name: 'JUNJA'),
(Code: VK_FINAL; Name: 'FINAL'),
(Code: VK_HANJA; Name: 'HANJA'),
(Code: VK_KANJI; Name: 'KANJI'),
(Code: VK_ESCAPE; Name: 'ESCAPE'),
(Code: VK_CONVERT; Name: 'CONVERT'),
(Code: VK_NONCONVERT; Name: 'NONCONVERT'),
(Code: VK_ACCEPT; Name: 'ACCEPT'),
(Code: VK_MODECHANGE; Name: 'MODECHANGE'),
(Code: VK_SPACE; Name: 'SPACE'),
(Code: VK_PRIOR; Name: 'PRIOR'),
(Code: VK_NEXT; Name: 'NEXT'),
(Code: VK_END; Name: 'END'),
(Code: VK_HOME; Name: 'HOME'),
(Code: VK_LEFT; Name: 'LEFT'),
(Code: VK_UP; Name: 'UP'),
(Code: VK_RIGHT; Name: 'RIGHT'),
(Code: VK_DOWN; Name: 'DOWN'),
(Code: VK_SELECT; Name: 'SELECT'),
(Code: VK_PRINT; Name: 'PRINT'),
(Code: VK_EXECUTE; Name: 'EXECUTE'),
(Code: VK_SNAPSHOT; Name: 'SNAPSHOT'),
(Code: VK_INSERT; Name: 'INSERT'),
(Code: VK_DELETE; Name: 'DELETE'),
(Code: VK_HELP; Name: 'HELP'),
(Code: VK_0; Name: '0'),
(Code: VK_1; Name: '1'),
(Code: VK_2; Name: '2'),
(Code: VK_3; Name: '3'),
(Code: VK_4; Name: '4'),
(Code: VK_5; Name: '5'),
(Code: VK_6; Name: '6'),
(Code: VK_7; Name: '7'),
(Code: VK_8; Name: '8'),
(Code: VK_9; Name: '9'),
(Code: VK_A; Name: 'A'),
(Code: VK_B; Name: 'B'),
(Code: VK_C; Name: 'C'),
(Code: VK_D; Name: 'D'),
(Code: VK_E; Name: 'E'),
(Code: VK_F; Name: 'F'),
(Code: VK_G; Name: 'G'),
(Code: VK_H; Name: 'H'),
(Code: VK_I; Name: 'I'),
(Code: VK_J; Name: 'J'),
(Code: VK_K; Name: 'K'),
(Code: VK_L; Name: 'L'),
(Code: VK_M; Name: 'M'),
(Code: VK_N; Name: 'N'),
(Code: VK_O; Name: 'O'),
(Code: VK_P; Name: 'P'),
(Code: VK_Q; Name: 'Q'),
(Code: VK_R; Name: 'R'),
(Code: VK_S; Name: 'S'),
(Code: VK_T; Name: 'T'),
(Code: VK_U; Name: 'U'),
(Code: VK_V; Name: 'V'),
(Code: VK_W; Name: 'W'),
(Code: VK_X; Name: 'X'),
(Code: VK_Y; Name: 'Y'),
(Code: VK_Z; Name: 'Z'),
(Code: VK_LWIN; Name: 'LWIN'),
(Code: VK_RWIN; Name: 'RWIN'),
(Code: VK_APPS; Name: 'APPS'),
(Code: VK_SLEEP; Name: 'SLEEP'),
(Code: VK_NUMPAD0; Name: 'NUMPAD0'),
(Code: VK_NUMPAD1; Name: 'NUMPAD1'),
(Code: VK_NUMPAD2; Name: 'NUMPAD2'),
(Code: VK_NUMPAD3; Name: 'NUMPAD3'),
(Code: VK_NUMPAD4; Name: 'NUMPAD4'),
(Code: VK_NUMPAD5; Name: 'NUMPAD5'),
(Code: VK_NUMPAD6; Name: 'NUMPAD6'),
(Code: VK_NUMPAD7; Name: 'NUMPAD7'),
(Code: VK_NUMPAD8; Name: 'NUMPAD8'),
(Code: VK_NUMPAD9; Name: 'NUMPAD9'),
(Code: VK_MULTIPLY; Name: 'MULTIPLY'),
(Code: VK_ADD; Name: 'ADD'),
(Code: VK_SEPARATOR; Name: 'SEPARATOR'),
(Code: VK_SUBTRACT; Name: 'SUBTRACT'),
(Code: VK_DECIMAL; Name: 'DECIMAL'),
(Code: VK_DIVIDE; Name: 'DIVIDE'),
(Code: VK_F1; Name: 'F1'),
(Code: VK_F2; Name: 'F2'),
(Code: VK_F3; Name: 'F3'),
(Code: VK_F4; Name: 'F4'),
(Code: VK_F5; Name: 'F5'),
(Code: VK_F6; Name: 'F6'),
(Code: VK_F7; Name: 'F7'),
(Code: VK_F8; Name: 'F8'),
(Code: VK_F9; Name: 'F9'),
(Code: VK_F10; Name: 'F10'),
(Code: VK_F11; Name: 'F11'),
(Code: VK_F12; Name: 'F12'),
(Code: VK_F13; Name: 'F13'),
(Code: VK_F14; Name: 'F14'),
(Code: VK_F15; Name: 'F15'),
(Code: VK_F16; Name: 'F16'),
(Code: VK_F17; Name: 'F17'),
(Code: VK_F18; Name: 'F18'),
(Code: VK_F19; Name: 'F19'),
(Code: VK_F20; Name: 'F20'),
(Code: VK_F21; Name: 'F21'),
(Code: VK_F22; Name: 'F22'),
(Code: VK_F23; Name: 'F23'),
(Code: VK_F24; Name: 'F24'),
(Code: VK_NUMLOCK; Name: 'NUMLOCK'),
(Code: VK_SCROLL; Name: 'SCROLL'),
(Code: VK_LSHIFT; Name: 'LSHIFT'),
(Code: VK_RSHIFT; Name: 'RSHIFT'),
(Code: VK_LCONTROL; Name: 'LCONTROL'),
(Code: VK_RCONTROL; Name: 'RCONTROL'),
(Code: VK_LMENU; Name: 'LMENU'),
(Code: VK_RMENU; Name: 'RMENU'),
(Code: VK_BROWSER_BACK; Name: 'BROWSER_BACK'),
(Code: VK_BROWSER_FORWARD; Name: 'BROWSER_FORWARD'),
(Code: VK_BROWSER_REFRESH; Name: 'BROWSER_REFRESH'),
(Code: VK_BROWSER_STOP; Name: 'BROWSER_STOP'),
(Code: VK_BROWSER_SEARCH; Name: 'BROWSER_SEARCH'),
(Code: VK_BROWSER_FAVORITES; Name: 'BROWSER_FAVORITES'),
(Code: VK_BROWSER_HOME; Name: 'BROWSER_HOME'),
(Code: VK_VOLUME_MUTE; Name: 'VOLUME_MUTE'),
(Code: VK_VOLUME_DOWN; Name: 'VOLUME_DOWN'),
(Code: VK_VOLUME_UP; Name: 'VOLUME_UP'),
(Code: VK_MEDIA_NEXT_TRACK; Name: 'MEDIA_NEXT_TRACK'),
(Code: VK_MEDIA_PREV_TRACK; Name: 'MEDIA_PREV_TRACK'),
(Code: VK_MEDIA_STOP; Name: 'MEDIA_STOP'),
(Code: VK_MEDIA_PLAY_PAUSE; Name: 'MEDIA_PLAY_PAUSE'),
(Code: VK_LAUNCH_MAIL; Name: 'LAUNCH_MAIL'),
(Code: VK_LAUNCH_MEDIA_SELECT; Name: 'LAUNCH_MEDIA_SELECT'),
(Code: VK_LAUNCH_APP1; Name: 'LAUNCH_APP1'),
(Code: VK_LAUNCH_APP2; Name: 'LAUNCH_APP2'),
(Code: VK_OEM_1; Name: 'OEM_1'),
(Code: VK_OEM_PLUS; Name: 'OEM_PLUS'),
(Code: VK_OEM_COMMA; Name: 'OEM_COMMA'),
(Code: VK_OEM_MINUS; Name: 'OEM_MINUS'),
(Code: VK_OEM_PERIOD; Name: 'OEM_PERIOD'),
(Code: VK_OEM_2; Name: 'OEM_2'),
(Code: VK_OEM_3; Name: 'OEM_3'),
(Code: VK_OEM_4; Name: 'OEM_4'),
(Code: VK_OEM_5; Name: 'OEM_5'),
(Code: VK_OEM_6; Name: 'OEM_6'),
(Code: VK_OEM_7; Name: 'OEM_7'),
(Code: VK_OEM_8; Name: 'OEM_8'),
(Code: VK_OEM_102; Name: 'OEM_102'),
(Code: VK_PROCESSKEY; Name: 'PROCESSKEY'),
(Code: VK_ATTN; Name: 'ATTN'),
(Code: VK_CRSEL; Name: 'CRSEL'),
(Code: VK_EXSEL; Name: 'EXSEL'),
(Code: VK_EREOF; Name: 'EREOF'),
(Code: VK_PLAY; Name: 'PLAY'),
(Code: VK_ZOOM; Name: 'ZOOM'),
(Code: VK_NONAME; Name: 'NONAME'),
(Code: VK_PA1; Name: 'PA1'),
(Code: VK_OEM_CLEAR; Name: 'OEM_CLEAR'),
(Code: VK_HIGHESTVALUE; Name: 'HIGHESTVALUE'),
(Code: VK_UNDEFINED; Name: 'UNDEFINED'),
(Code: VK_LCL_EQUAL; Name: 'LCL_EQUAL'),
(Code: VK_LCL_COMMA; Name: 'LCL_COMMA'),
(Code: VK_LCL_POINT; Name: 'LCL_POINT'),
(Code: VK_LCL_SLASH; Name: 'LCL_SLASH'),
(Code: VK_LCL_SEMI_COMMA; Name: 'LCL_SEMI_COMMA'),
(Code: VK_LCL_MINUS; Name: 'LCL_MINUS'),
(Code: VK_LCL_OPEN_BRACKET; Name: 'LCL_OPEN_BRACKET'),
(Code: VK_LCL_CLOSE_BRACKET; Name: 'LCL_CLOSE_BRACKET'),
(Code: VK_LCL_BACKSLASH; Name: 'LCL_BACKSLASH'),
(Code: VK_LCL_TILDE; Name: 'LCL_TILDE'),
(Code: VK_LCL_QUOTE; Name: 'LCL_QUOTE'),
(Code: VK_LCL_ALT; Name: 'LCL_ALT'),
(Code: VK_LCL_LALT; Name: 'LCL_LALT'),
(Code: VK_LCL_RALT; Name: 'LCL_RALT'),
(Code: VK_LCL_CAPSLOCK; Name: 'LCL_CAPSLOCK'),
(Code: VK_LCL_POWER; Name: 'LCL_POWER'),
(Code: VK_LCL_CALL; Name: 'LCL_CALL'),
(Code: VK_LCL_ENDCALL; Name: 'LCL_ENDCALL'),
(Code: VK_LCL_AT; Name: 'LCL_AT')
);
implementation
function GetVKIndexByCode(Code: Word): Integer;
var
i: Integer;
begin
Result := 0;
for i:=Low(VKcodes) to High(VKCodes) do begin
if VKcodes[i].Code = Code then begin
Result := i;
Break;
end;
end;
end;
procedure GetVKNames(Items: TStrings);
var
i: Integer;
begin
Items.Clear;
for i:=Low(VKcodes) to High(VKcodes) do begin
Items.Add(VKcodes[i].Name);
end;
end;
end.