Thema: Delphi Tastatur multilingual

Einzelnen Beitrag anzeigen

Ghostwalker

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

Re: Tastatur multilingual

  Alt 20. Jul 2003, 10:45
so..nach etwas tüftelei hab ich nun die Routine fertig. Sie ermittelt zu einem Virtuellen Tastencode das entsprechende Zeichen. Auch die Shift-Taste wird hierbei berücksichtigt.

Delphi-Quellcode:
function VKToChar(Key:smallint;Shift:boolean=false;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);
//Wenn kein Keyboardlayout angegeben dann das des aktuellen Threads nehmen
  if (layout = 0) then
    layout := GetKeyboardlayout(0);
//virtuellen Tastencode der Taste ermitteln
  VK := VKKeyScan(chr(key));
//Scan-Code ermitteln
  scan := MapVirtualKey(VK,0);
//Keyboard-State ermitteln und entsprechend setzten
  GetKeyboardState(kb);
  kb[key] := (kb[VK] or $80);
  if shift then
    kb[VK_SHIFT] := KB[VK_SHIFT] OR $80;
  SetKeyboardState(kb);
//Zeichen ermitteln
  erg := toAsciiEx(VK,scan,kb,@hs,0,layout);
  if (erg > 0) then
    result := StrPas(HS)
  else
    result := 'ERROR';
end;
Somit ist es möglich zu ermitteln welches zeichen entsteht wenn ich beispielsweise SHIFT+1 drücke ('!'). Leider funktioniert das nicht mit der ALT GR-Taste.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat