Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 

Tastatur-Zeichen herausfinden

  Alt 21. Jul 2003, 07:36
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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat