![]() |
Tastatur-Zeichen herausfinden
Hier nun das Ergebnis meines Tastaturproblems:
Delphi-Quellcode:
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
//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; 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