Browse Source

+ also invoke TranslateKey to get more data (either Ascii or virtual key translation)
when converting a TKeyEvent to TExtendedKeyEvent
+ also fill UnicodeChar from AsciiChar if AsciiChar is in the standard Ascii range
(#0..#127)

git-svn-id: branches/unicodekvm@40094 -

nickysn 6 years ago
parent
commit
c10c9607f1
1 changed files with 19 additions and 2 deletions
  1. 19 2
      packages/rtl-console/src/inc/keyboard.inc

+ 19 - 2
packages/rtl-console/src/inc/keyboard.inc

@@ -155,6 +155,8 @@ begin
 end;
 
 function ConvertToEnhancedKeyEvent(KeyEvent: TKeyEvent): TEnhancedKeyEvent;
+var
+  TranslatedKeyEvent: TKeyEvent;
 begin
   FillChar(ConvertToEnhancedKeyEvent,SizeOf(ConvertToEnhancedKeyEvent),0);
   if KeyEvent=0 then
@@ -168,11 +170,26 @@ begin
     kbFnKey:
       ConvertToEnhancedKeyEvent.VirtualKeyCode:=GetKeyEventCode(KeyEvent);
     kbPhys:
-      // Not good, we need a GetKeyEventScanCode function !!
       ConvertToEnhancedKeyEvent.VirtualScanCode:=KeyEvent and $ffff;
   end;
+  TranslatedKeyEvent:=TranslateKeyEvent(KeyEvent);
+  case GetKeyEventFlags(TranslatedKeyEvent) of
+    kbASCII:
+      ConvertToEnhancedKeyEvent.AsciiChar:=GetKeyEventChar(TranslatedKeyEvent);
+    kbUniCode:
+      ConvertToEnhancedKeyEvent.UnicodeChar:=WideChar(GetKeyEventUniCode(TranslatedKeyEvent));
+    kbFnKey:
+      ConvertToEnhancedKeyEvent.VirtualKeyCode:=GetKeyEventCode(TranslatedKeyEvent);
+    kbPhys:
+      ConvertToEnhancedKeyEvent.VirtualScanCode:=TranslatedKeyEvent and $ffff;
+  end;
   { todo: set ConvertToEnhancedKeyEvent.Flags }
-  { todo: attempt to set AsciiChar and WideChar if they are missing }
+  if (ConvertToEnhancedKeyEvent.UnicodeChar=WideChar(0)) and
+     (ConvertToEnhancedKeyEvent.AsciiChar>=#0) and
+     (ConvertToEnhancedKeyEvent.AsciiChar<=#127) then
+    ConvertToEnhancedKeyEvent.UnicodeChar:=WideChar(ConvertToEnhancedKeyEvent.AsciiChar);
+  { todo: maybe also convert extended ASCII (>=#128) codes to Unicode as well
+    (according to the console code page) }
 end;
 
 function DefaultGetEnhancedKeyEvent: TEnhancedKeyEvent;