Browse Source

+ implemented SysGetEnhancedKeyEvent and SysPollEnhancedKeyEvent for win32/win64

git-svn-id: branches/unicodekvm@40266 -
nickysn 6 years ago
parent
commit
2593a69eaf
1 changed files with 31 additions and 0 deletions
  1. 31 0
      packages/rtl-console/src/win/keyboard.pp

+ 31 - 0
packages/rtl-console/src/win/keyboard.pp

@@ -1018,6 +1018,37 @@ begin
   TranslateEnhancedKeyEvent := Key;
   TranslateEnhancedKeyEvent := Key;
 end;
 end;
 
 
+function SysGetEnhancedKeyEvent: TEnhancedKeyEvent;
+var t   : TKeyEventRecord;
+    key : TEnhancedKeyEvent;
+begin
+  key := NilEnhancedKeyEvent;
+  repeat
+     if getKeyEventFromQueueWait (t) then
+       key := TranslateEnhancedKeyEvent (t);
+  until key <> NilEnhancedKeyEvent;
+  SysGetEnhancedKeyEvent := key;
+end;
+
+function SysPollEnhancedKeyEvent: TEnhancedKeyEvent;
+var t   : TKeyEventRecord;
+    k   : TEnhancedKeyEvent;
+begin
+  SysPollEnhancedKeyEvent := NilEnhancedKeyEvent;
+  if getKeyEventFromQueue (t, true) then
+  begin
+    { we get an enty for shift, ctrl, alt... }
+    k := TranslateEnhancedKeyEvent (t);
+    while (k = NilEnhancedKeyEvent) do
+    begin
+      getKeyEventFromQueue (t, false);  {remove it}
+      if not getKeyEventFromQueue (t, true) then exit;
+      k := TranslateEnhancedKeyEvent (t)
+    end;
+    SysPollEnhancedKeyEvent := k;
+  end;
+end;
+
 Const
 Const
   SysKeyboardDriver : TKeyboardDriver = (
   SysKeyboardDriver : TKeyboardDriver = (
     InitDriver : @SysInitKeyBoard;
     InitDriver : @SysInitKeyBoard;