Recent

Author Topic: Two function suggested to be incorpored in LCL: Key2Name and Name2Key  (Read 6162 times)

everton

  • Jr. Member
  • **
  • Posts: 89
function Name2Key(Name: String): Word;
begin
  Result := 0;
  if Name = 'UNKNOWN' then Result :=  0
  else if Name = 'LBUTTON' then Result :=  1
  else if Name = 'RBUTTON' then Result :=  2
  else if Name = 'CANCEL' then Result :=  3
  else if Name = 'MBUTTON' then Result :=  4
  else if Name = 'XBUTTON1' then Result :=  5
  else if Name = 'XBUTTON2' then Result :=  6
  else if Name = 'BACK' then Result :=  8
  else if Name = 'TAB' then Result :=  9
  else if Name = 'CLEAR' then Result :=  12
  else if Name = 'RETURN' then Result :=  13
  else if Name = 'SHIFT' then Result :=  16
  else if Name = 'CONTROL' then Result :=  17
  else if Name = 'MENU' then Result :=  18
  else if Name = 'PAUSE' then Result :=  19
  else if Name = 'CAPITAL' then Result :=  20
  else if Name = 'KANA' then Result :=  21
  else if Name = 'HANGUL' then Result :=  22
  else if Name = 'JUNJA' then Result :=  23
  else if Name = 'FINAL' then Result :=  24
  else if Name = 'HANJA' then Result :=  25
  else if Name = 'KANJI' then Result :=  26
  else if Name = 'ESCAPE' then Result :=  27
  else if Name = 'CONVERT' then Result :=  28
  else if Name = 'NONCONVERT' then Result :=  29
  else if Name = 'ACCEPT' then Result :=  30
  else if Name = 'MODECHANGE' then Result :=  31
  else if Name = 'SPACE' then Result :=  32
  else if Name = 'PRIOR' then Result :=  33
  else if Name = 'NEXT' then Result :=  34
  else if Name = 'END' then Result :=  35
  else if Name = 'HOME' then Result :=  36
  else if Name = 'LEFT' then Result :=  37
  else if Name = 'UP' then Result :=  38
  else if Name = 'RIGHT' then Result :=  39
  else if Name = 'DOWN' then Result :=  40
  else if Name = 'SELECT' then Result :=  41
  else if Name = 'PRINT' then Result :=  42
  else if Name = 'EXECUTE' then Result :=  43
  else if Name = 'SNAPSHOT' then Result :=  44
  else if Name = 'INSERT' then Result :=  45
  else if Name = 'DELETE' then Result :=  46
  else if Name = 'HELP' then Result :=  47
  else if Name = '0' then Result :=  $30
  else if Name = '1' then Result :=  $31
  else if Name = '2' then Result :=  $32
  else if Name = '3' then Result :=  $33
  else if Name = '4' then Result :=  $34
  else if Name = '5' then Result :=  $35
  else if Name = '6' then Result :=  $36
  else if Name = '7' then Result :=  $37
  else if Name = '8' then Result :=  $38
  else if Name = '9' then Result :=  $39
  else if Name = 'A' then Result :=  $41
  else if Name = 'B' then Result :=  $42
  else if Name = 'C' then Result :=  $43
  else if Name = 'D' then Result :=  $44
  else if Name = 'E' then Result :=  $45
  else if Name = 'F' then Result :=  $46
  else if Name = 'G' then Result :=  $47
  else if Name = 'H' then Result :=  $48
  else if Name = 'I' then Result :=  $49
  else if Name = 'J' then Result :=  $4A
  else if Name = 'K' then Result :=  $4B
  else if Name = 'L' then Result :=  $4C
  else if Name = 'M' then Result :=  $4D
  else if Name = 'N' then Result :=  $4E
  else if Name = 'O' then Result :=  $4F
  else if Name = 'P' then Result :=  $50
  else if Name = 'Q' then Result :=  $51
  else if Name = 'R' then Result :=  $52
  else if Name = 'S' then Result :=  $53
  else if Name = 'T' then Result :=  $54
  else if Name = 'U' then Result :=  $55
  else if Name = 'V' then Result :=  $56
  else if Name = 'W' then Result :=  $57
  else if Name = 'X' then Result :=  $58
  else if Name = 'Y' then Result :=  $59
  else if Name = 'Z' then Result :=  $5A
  else if Name = 'LWIN' then Result :=  $5B
  else if Name = 'RWIN' then Result :=  $5C
  else if Name = 'APPS' then Result :=  $5D
  else if Name = 'SLEEP' then Result :=  $5F
  else if Name = 'NUMPAD0' then Result :=  96
  else if Name = 'NUMPAD1' then Result :=  97
  else if Name = 'NUMPAD2' then Result :=  98
  else if Name = 'NUMPAD3' then Result :=  99
  else if Name = 'NUMPAD4' then Result :=  100
  else if Name = 'NUMPAD5' then Result :=  101
  else if Name = 'NUMPAD6' then Result :=  102
  else if Name = 'NUMPAD7' then Result :=  103
  else if Name = 'NUMPAD8' then Result :=  104
  else if Name = 'NUMPAD9' then Result :=  105
  else if Name = 'MULTIPLY' then Result :=  106
  else if Name = 'ADD' then Result :=  107
  else if Name = 'SEPARATOR' then Result :=  108
  else if Name = 'SUBTRACT' then Result :=  109
  else if Name = 'DECIMAL' then Result :=  110
  else if Name = 'DIVIDE' then Result :=  111
  else if Name = 'F1' then Result :=  112
  else if Name = 'F2' then Result :=  113
  else if Name = 'F3' then Result :=  114
  else if Name = 'F4' then Result :=  115
  else if Name = 'F5' then Result :=  116
  else if Name = 'F6' then Result :=  117
  else if Name = 'F7' then Result :=  118
  else if Name = 'F8' then Result :=  119
  else if Name = 'F9' then Result :=  120
  else if Name = 'F10' then Result :=  121
  else if Name = 'F11' then Result :=  122
  else if Name = 'F12' then Result :=  123
  else if Name = 'F13' then Result :=  124
  else if Name = 'F14' then Result :=  125
  else if Name = 'F15' then Result :=  126
  else if Name = 'F16' then Result :=  127
  else if Name = 'F17' then Result :=  128
  else if Name = 'F18' then Result :=  129
  else if Name = 'F19' then Result :=  130
  else if Name = 'F20' then Result :=  131
  else if Name = 'F21' then Result :=  132
  else if Name = 'F22' then Result :=  133
  else if Name = 'F23' then Result :=  134
  else if Name = 'F24' then Result :=  135
  else if Name = 'NUMLOCK' then Result :=  $90
  else if Name = 'SCROLL' then Result :=  $91
  else if Name = 'LSHIFT' then Result :=  $A0
  else if Name = 'RSHIFT' then Result :=  $A1
  else if Name = 'LCONTROL' then Result :=  $A2
  else if Name = 'RCONTROL' then Result :=  $A3
  else if Name = 'LMENU' then Result :=  $A4
  else if Name = 'RMENU' then Result :=  $A5
  else if Name = 'BROWSER_BACK' then Result :=  $A6
  else if Name = 'BROWSER_FORWARD' then Result :=  $A7
  else if Name = 'BROWSER_REFRESH' then Result :=  $A8
  else if Name = 'BROWSER_STOP' then Result :=  $A9
  else if Name = 'BROWSER_SEARCH' then Result :=  $AA
  else if Name = 'BROWSER_FAVORITES' then Result :=  $AB
  else if Name = 'BROWSER_HOME' then Result :=  $AC
  else if Name = 'VOLUME_MUTE' then Result :=  $AD
  else if Name = 'VOLUME_DOWN' then Result :=  $AE
  else if Name = 'VOLUME_UP' then Result :=  $AF
  else if Name = 'MEDIA_NEXT_TRACK' then Result :=  $B0
  else if Name = 'MEDIA_PREV_TRACK' then Result :=  $B1
  else if Name = 'MEDIA_STOP' then Result :=  $B2
  else if Name = 'MEDIA_PLAY_PAUSE' then Result :=  $B3
  else if Name = 'LAUNCH_MAIL' then Result :=  $B4
  else if Name = 'LAUNCH_MEDIA_SELECT' then Result :=  $B5
  else if Name = 'LAUNCH_APP1' then Result :=  $B6
  else if Name = 'LAUNCH_APP2' then Result :=  $B7
  else if Name = 'OEM_1' then Result :=  $BA
  else if Name = 'OEM_PLUS' then Result :=  $BB
  else if Name = 'OEM_COMMA' then Result :=  $BC
  else if Name = 'OEM_MINUS' then Result :=  $BD
  else if Name = 'OEM_PERIOD' then Result :=  $BE
  else if Name = 'OEM_2' then Result :=  $BF
  else if Name = 'OEM_3' then Result :=  $C0
  else if Name = 'OEM_4' then Result :=  $DB
  else if Name = 'OEM_5' then Result :=  $DC
  else if Name = 'OEM_6' then Result :=  $DD
  else if Name = 'OEM_7' then Result :=  $DE
  else if Name = 'OEM_8' then Result :=  $DF
  else if Name = 'OEM_102' then Result :=  $E2
  else if Name = 'PROCESSKEY' then Result :=  $E7
  else if Name = 'ATTN' then Result :=  $F6
  else if Name = 'CRSEL' then Result :=  $F7
  else if Name = 'EXSEL' then Result :=  $F8
  else if Name = 'EREOF' then Result :=  $F9
  else if Name = 'PLAY' then Result :=  $FA
  else if Name = 'ZOOM' then Result :=  $FB
  else if Name = 'NONAME' then Result :=  $FC
  else if Name = 'PA1' then Result :=  $FD
  else if Name = 'OEM_CLEAR' then Result :=  $FE
  else if Name = 'UNDEFINED' then Result :=  $FF;
end;

function Key2Name(Key: Word): String;
begin
  Result := '';
  case Key of
    0 : Result := 'UNKNOWN';
    1 : Result := 'LBUTTON';
    2 : Result := 'RBUTTON';
    3 : Result := 'CANCEL';
    4 : Result := 'MBUTTON';
    5 : Result := 'XBUTTON1';
    6 : Result := 'XBUTTON2';
    8 : Result := 'BACK';
    9 : Result := 'TAB';
    12 : Result := 'CLEAR';
    13 : Result := 'RETURN';
    16 : Result := 'SHIFT';
    17 : Result := 'CONTROL';
    18 : Result := 'MENU';
    19 : Result := 'PAUSE';
    20 : Result := 'CAPITAL';
    21 : Result := 'KANA';
    22 : Result := 'HANGUL';
    23 : Result := 'JUNJA';
    24 : Result := 'FINAL';
    25 : Result := 'HANJA';
    26 : Result := 'KANJI';
    27 : Result := 'ESCAPE';
    28 : Result := 'CONVERT';
    29 : Result := 'NONCONVERT';
    30 : Result := 'ACCEPT';
    31 : Result := 'MODECHANGE';
    32 : Result := 'SPACE';
    33 : Result := 'PRIOR';
    34 : Result := 'NEXT';
    35 : Result := 'END';
    36 : Result := 'HOME';
    37 : Result := 'LEFT';
    38 : Result := 'UP';
    39 : Result := 'RIGHT';
    40 : Result := 'DOWN';
    41 : Result := 'SELECT';
    42 : Result := 'PRINT';
    43 : Result := 'EXECUTE';
    44 : Result := 'SNAPSHOT';
    45 : Result := 'INSERT';
    46 : Result := 'DELETE';
    47 : Result := 'HELP';
    $30 : Result := '0';
    $31 : Result := '1';
    $32 : Result := '2';
    $33 : Result := '3';
    $34 : Result := '4';
    $35 : Result := '5';
    $36 : Result := '6';
    $37 : Result := '7';
    $38 : Result := '8';
    $39 : Result := '9';
    $41 : Result := 'A';
    $42 : Result := 'B';
    $43 : Result := 'C';
    $44 : Result := 'D';
    $45 : Result := 'E';
    $46 : Result := 'F';
    $47 : Result := 'G';
    $48 : Result := 'H';
    $49 : Result := 'I';
    $4A : Result := 'J';
    $4B : Result := 'K';
    $4C : Result := 'L';
    $4D : Result := 'M';
    $4E : Result := 'N';
    $4F : Result := 'O';
    $50 : Result := 'P';
    $51 : Result := 'Q';
    $52 : Result := 'R';
    $53 : Result := 'S';
    $54 : Result := 'T';
    $55 : Result := 'U';
    $56 : Result := 'V';
    $57 : Result := 'W';
    $58 : Result := 'X';
    $59 : Result := 'Y';
    $5A : Result := 'Z';
    $5B : Result := 'LWIN';
    $5C : Result := 'RWIN';
    $5D : Result := 'APPS';
    $5F : Result := 'SLEEP';
    96 : Result := 'NUMPAD0';
    97 : Result := 'NUMPAD1';
    98 : Result := 'NUMPAD2';
    99 : Result := 'NUMPAD3';
    100 : Result := 'NUMPAD4';
    101 : Result := 'NUMPAD5';
    102 : Result := 'NUMPAD6';
    103 : Result := 'NUMPAD7';
    104 : Result := 'NUMPAD8';
    105 : Result := 'NUMPAD9';
    106 : Result := 'MULTIPLY';
    107 : Result := 'ADD';
    108 : Result := 'SEPARATOR';
    109 : Result := 'SUBTRACT';
    110 : Result := 'DECIMAL';
    111 : Result := 'DIVIDE';
    112 : Result := 'F1';
    113 : Result := 'F2';
    114 : Result := 'F3';
    115 : Result := 'F4';
    116 : Result := 'F5';
    117 : Result := 'F6';
    118 : Result := 'F7';
    119 : Result := 'F8';
    120 : Result := 'F9';
    121 : Result := 'F10';
    122 : Result := 'F11';
    123 : Result := 'F12';
    124 : Result := 'F13';
    125 : Result := 'F14';
    126 : Result := 'F15';
    127 : Result := 'F16';
    128 : Result := 'F17';
    129 : Result := 'F18';
    130 : Result := 'F19';
    131 : Result := 'F20';
    132 : Result := 'F21';
    133 : Result := 'F22';
    134 : Result := 'F23';
    135 : Result := 'F24';
    $90 : Result := 'NUMLOCK';
    $91 : Result := 'SCROLL';
    $A0 : Result := 'LSHIFT';
    $A1 : Result := 'RSHIFT';
    $A2 : Result := 'LCONTROL';
    $A3 : Result := 'RCONTROL';
    $A4 : Result := 'LMENU';
    $A5 : Result := 'RMENU';
    $A6 : Result := 'BROWSER_BACK';
    $A7 : Result := 'BROWSER_FORWARD';
    $A8 : Result := 'BROWSER_REFRESH';
    $A9 : Result := 'BROWSER_STOP';
    $AA : Result := 'BROWSER_SEARCH';
    $AB : Result := 'BROWSER_FAVORITES';
    $AC : Result := 'BROWSER_HOME';
    $AD : Result := 'VOLUME_MUTE';
    $AE : Result := 'VOLUME_DOWN';
    $AF : Result := 'VOLUME_UP';
    $B0 : Result := 'MEDIA_NEXT_TRACK';
    $B1 : Result := 'MEDIA_PREV_TRACK';
    $B2 : Result := 'MEDIA_STOP';
    $B3 : Result := 'MEDIA_PLAY_PAUSE';
    $B4 : Result := 'LAUNCH_MAIL';
    $B5 : Result := 'LAUNCH_MEDIA_SELECT';
    $B6 : Result := 'LAUNCH_APP1';
    $B7 : Result := 'LAUNCH_APP2';
    $BA : Result := 'OEM_1';
    $BB : Result := 'OEM_PLUS';
    $BC : Result := 'OEM_COMMA';
    $BD : Result := 'OEM_MINUS';
    $BE : Result := 'OEM_PERIOD';
    $BF : Result := 'OEM_2';
    $C0 : Result := 'OEM_3';
    $DB : Result := 'OEM_4';
    $DC : Result := 'OEM_5';
    $DD : Result := 'OEM_6';
    $DE : Result := 'OEM_7';
    $DF : Result := 'OEM_8';
    $E2 : Result := 'OEM_102';
    $E7 : Result := 'PROCESSKEY';
    $F6 : Result := 'ATTN';
    $F7 : Result := 'CRSEL';
    $F8 : Result := 'EXSEL';
    $F9 : Result := 'EREOF';
    $FA : Result := 'PLAY';
    $FB : Result := 'ZOOM';
    $FC : Result := 'NONAME';
    $FD : Result := 'PA1';
    $FE : Result := 'OEM_CLEAR';
    $FF : Result := 'UNDEFINED';
  end;
end;

Blaazen

  • Hero Member
  • *****
  • Posts: 3241
  • POKE 54296,15
    • Eye-Candy Controls
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #1 on: November 05, 2011, 09:48:22 pm »
I only note that the first function can be also done with case .. of construction (I am not sure if fpc 2.4.4 can do it but I am sure that it works in trunk).
Lazarus 2.3.0 (rev main-2_3-2863...) FPC 3.3.1 x86_64-linux-qt Chakra, Qt 4.8.7/5.13.2, Plasma 5.17.3
Lazarus 1.8.2 r57369 FPC 3.0.4 i386-win32-win32/win64 Wine 3.21

Try Eye-Candy Controls: https://sourceforge.net/projects/eccontrols/files/

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4680
  • I like bugs.
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #2 on: November 05, 2011, 10:13:58 pm »
See function KeyAndShiftStateToKeyString() in LCLProc. It is about like your Key2Name(). It is used for menu shortcut texts among other things.
In fact I just recently combined 2 almost identical funcs and moved to LCLProc, in r33283.

Why would LCL need Name2Key() (or similar)? If you find good reasons for it and make a patch that uses the existing key and string constants then I will apply it.
Use the bug-tracker for your (possible) patch.
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #3 on: November 05, 2011, 10:59:00 pm »
Name2Key does not look like something generally useful enough to warrant a inclusion.

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4680
  • I like bugs.
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #4 on: November 05, 2011, 11:10:14 pm »
There are also ShortCutToText() and TextToShortCut() in LCLProc. The latter is like your Name2Key().
I think KeyAndShiftStateToKeyString() and ShortCutToText() are so similar they could be combined into one func. However I didn't compare their output.
What does Felipe say?

Juha
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

JuhaManninen

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4680
  • I like bugs.
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #5 on: November 06, 2011, 04:12:04 pm »
everton, what do you say about  ShortCutToText() and TextToShortCut()? Are they good for your purposes?

Juha
Mostly Lazarus trunk and FPC 3.2 on Manjaro Linux 64-bit.

everton

  • Jr. Member
  • **
  • Posts: 89
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #6 on: November 06, 2011, 08:24:09 pm »
Yeah, totaly good for, I'm not finding the function to convert the TShortCut format to Key and ShiftState format

everton

  • Jr. Member
  • **
  • Posts: 89
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #7 on: November 06, 2011, 08:27:11 pm »
Ops, I found. Many thanks! I'll use their instead.

everton

  • Jr. Member
  • **
  • Posts: 89
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #8 on: November 06, 2011, 08:31:18 pm »
Is good to know that is already covered in LCL. Thanks the ones who did.

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: Two function suggested to be incorpored in LCL: Key2Name and Name2Key
« Reply #9 on: November 06, 2011, 10:22:36 pm »
There are also ShortCutToText() and TextToShortCut() in LCLProc. The latter is like your Name2Key().
I think KeyAndShiftStateToKeyString() and ShortCutToText() are so similar they could be combined into one func. However I didn't compare their output.
What does Felipe say?

Ummm ... one would need to compare their output, but if it is really the same, then I would think about making ShortCutToText call KeyAndShiftStateToKeyString to do the real work, because looking at the code the source code, KeyAndShiftStateToKeyString looks much better written, much more clear, easier to understand. And I think that having 1 extra variant with different parameters is good too, although maybe it should be called KeyAndShiftStateToText to have a name more similar to the other one.

 

TinyPortal © 2005-2018