![]() |
Tastatur multilingual
Also..folgendes Problem:
Ich suche nach einer Möglichkeit, herauszufinden welche Tastencodes welches Zeichen ergeben. Das Problem dabei ist das das ganze möglichst im mehrsprachigen Umfeld funktionieren sollte. Beispiel: deutsche Tastatur: # = 191 englische Tastatur: # = Shift+51 Weiß jemand wie man das möglichst einfach ermitteln kann ? |
Re: Tastatur multilingual
|
Re: Tastatur multilingual
Nein...wenn dann brauch ich Ansi, da windows an und für sich mit ASCII nix anfangen kann (darstellung).
|
Re: Tastatur multilingual
![]() |
Re: Tastatur multilingual
Du verstehst mich falsch.
In der Windows-API gibts eine Funktion vkkeyscan. diese gibt mir für ein bestimmtes Zeichen den virtuellen Tastencode..und zwar abhängig von der eingestelleten Tastatur (deutsch,englisch, chinesisch usw..). Was ich brauche wär eine Umkehrfunktion dazu. Ich hab den virtuellen Keycode (z.B. VK_Shift+'1') und brauche dazu das entsprechende Zeichen, auch wieder abhängig von der eingestellten Tastatur. Ich will es eigentlich vermeiden hunderte von Konstanten-Units zu bauen:) |
Re: Tastatur multilingual
Hier mal ein Auszug aus dem PSDK ... wie wäre es denn erstmal mit dem Nachschauen in der Dokumentation? :mrgreen: :
Zitat:
|
Re: Tastatur multilingual
oh..hm...öhm...ja...wer lesen kann ist klar im Vorteil. :oops: :oops: :oops:
|
Re: Tastatur multilingual
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:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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