Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Object-Pascal / Delphi-Language (https://www.delphipraxis.net/35-library-object-pascal-delphi-language/)
-   -   Delphi Tastatur-Zeichen herausfinden (https://www.delphipraxis.net/6748-tastatur-zeichen-herausfinden.html)

Ghostwalker 21. Jul 2003 07:36


Tastatur-Zeichen herausfinden
 
Hier nun das Ergebnis meines Tastaturproblems:

Delphi-Quellcode:
//Sondertaste:
// 0 = Keine Sondertaste gedrückt
// 1 = SHIFT-Taste gedrückt
// 2 = ALTGR-Taste gedrückt
function VKToChar(Key:smallint;Sondertaste:byte=0;layout:HKL=0):string;
var
  kb : TKeyboardState;
  VK : UINT;
  scan : UINT;
  hs : array [0..255] of char;
  erg : Integer;
begin
  result := '';
  fillchar(hs,sizeof(hs),0);
  if (layout = 0) then
    layout := GetKeyboardlayout(0);
  VK := VKKeyScan(chr(key));
  scan := MapVirtualKey(VK,0);
  GetKeyboardState(kb);
  Fillchar(KB,sizeof(KB),0);
  Case Sondertaste of
       1 : kb[VK_SHIFT] := KB[VK_SHIFT] OR $80;
       2 : begin
             KB[VK_CONTROL] := $81;
             KB[VK_MENU] := $81;
             KB[VK_LCONTROL] := $81;
             KB[VK_RMENU] := $81;
           end;
  end;
  kb[VK] := (kb[VK] or $80);
  SetKeyboardState(kb);
  erg := toAsciiEx(VK,scan,kb,@hs,0,layout);
  //Deadkey-Behandlung
  if (erg < 0) then
  begin
    fillchar(hs,sizeof(hs),0);
    kb[VK_SPACE] := (kb[VK_SPACE] or $80);
    SetKeyboardState(kb);
    erg := toAsciiEx(VK,scan,kb,@hs,0,layout);
    result := hs[0];
  end
  else
    if (erg > 0) then
      result := StrPas(HS);
end;
Die Routine gibt das Zeichen für eine Taste zurück. Je nach parameter kann zusätzlich auch die SHIFT oder die ALTGR-Taste mitsimuliert werden. So ist es z.B. möglich herauszufinden welches Zeichen beim drücken der
Tastenkombination ALTGR+E ausgegeben wird. Das ganze sollte auch im multilingualen umfeld funktionieren da man das Tastaturlayout mit angegeben kann. Wird dies nicht getan wird automatisch das Tastaturlayout des aktuellen Threads benutzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz