Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShiftState abfragen (https://www.delphipraxis.net/53896-shiftstate-abfragen.html)

Thomas233 24. Sep 2005 20:04


ShiftState abfragen
 
Hallo,

ich hab mal wieder eine Frage an euch.

Wie kann ich den Shift-Status herausfinden bzw. wie kann ich herausfinden ob ein Buchstabe in Großbuchstaben oder Kleinbuchstaben eingegeben wurde (ich wandle DirectX-Keycodes in Virtual-Keys und dann in Chars um, leider liefert mir die Funktion nur Grossbuchstaben ohne Berücksichtigung der Shift-Taste).

Delphi-Quellcode:
function D3DDirectInputKeyCodeToChar(key:cardinal):Char;
var layout:HKL;
    state:TKeyboardState;
    map:cardinal;
begin
layout:=GetKeyboardLayout(0); //Actual keyboard layout

if (GetKeyboardState(State)=True) then begin
   map:=MapVirtualKeyEx(key,1,layout);
   Result:=chr(map); //Char
end;

end;
Wäre für einen Tipp sehr dankbar.

Vielen Dank im Vorraus !

Liebe Grüße,
Thomas

JasonDX 24. Sep 2005 20:16

Re: ShiftState abfragen
 
Den ShiftState erhälst du über verschiedene Funktionen, welche in der Forms.pas deklariert sind:
Delphi-Quellcode:
function KeysToShiftState(Keys: Word): TShiftState;
function KeyDataToShiftState(KeyData: Longint): TShiftState;
function KeyboardStateToShiftState(const KeyboardState: TKeyboardState): TShiftState; overload;
function KeyboardStateToShiftState: TShiftState; overload;
Wobei die letzten 2 die interessantesten für dich sein dürften. Dann ganz einfach fragen, ob ssShift enthalten ist oder nicht.
Allerdings musst du dann noch überprüfen, ob der CapsLock aktiv ist, was dann die Groß-/Kleinschreibung ja invertiert. Dabei dürfte dir das weiterhelfen ;)

Thomas233 24. Sep 2005 20:26

Re: ShiftState abfragen
 
Ah danke, die Funktion für Caps-Lock hat gereicht, die aus der Forms.pas brauche ich nicht, wobei ich sowieso vergessen habe zu erwähnen das es sich bei der entsprechenden Anwendung um eine NonVCL-Anwendung handelt.

Vielen Dank !!

Liebe Grüße,
Thomas

Robert Marquardt 25. Sep 2005 05:48

Re: ShiftState abfragen
 
Das ist nicht DirectInput sondern Win32. GetKeyboardLayout(0) sollte nicht noetig sein, denn MapVirtualKey benutzt das aktuelle Layout das du ja abrufst.
Warum nimmst du nicht GetKeyState(VK_CAPSLOCK)? Das ist uebrigens der CapsLock-Status und nicht der Shift-Status.

Am besten funktioniert ToAscii fuer dich.

VkKeyScan darf nicht vergessen werden, da der CapsLock-Status je nach Tastaturlayout unterschiedliche Bedeutung hat.
Bei dem normalen deutschen Layout ist es ein ShiftLock, waehrend "Deutsch (IBM)" ein CapsLock implementiert.
Der Unterschied liegt in der Zeile der Zifferntasten. ShiftLock ergibt bei "1" ddas Zeichen "!" waehrend CapsLock "1" ergibt.


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

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