AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShiftState abfragen

Ein Thema von Thomas233 · begonnen am 24. Sep 2005 · letzter Beitrag vom 25. Sep 2005
Antwort Antwort
Thomas233

Registriert seit: 20. Feb 2004
Ort: Villach
66 Beiträge
 
Delphi 2005 Personal
 
#1

ShiftState abfragen

  Alt 24. Sep 2005, 20:04
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
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: ShiftState abfragen

  Alt 24. Sep 2005, 20:16
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Thomas233

Registriert seit: 20. Feb 2004
Ort: Villach
66 Beiträge
 
Delphi 2005 Personal
 
#3

Re: ShiftState abfragen

  Alt 24. Sep 2005, 20:26
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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: ShiftState abfragen

  Alt 25. Sep 2005, 05:48
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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