Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tastaturcode bekommen (https://www.delphipraxis.net/54320-tastaturcode-bekommen.html)

luckystar85 1. Okt 2005 17:19


Tastaturcode bekommen
 
Moin,

wenn ich bei einem Edit das Ergeibnis OnKeyDown verwende, wird mir mit Hilfe von "Key" der Tastaturcode überreicht. Kann ich den auch irgendwie bekommen ohne auf das Ereignis KeyDown zurück zugreifen?

SirThornberry 1. Okt 2005 17:25

Re: Tastaturcode bekommen
 
ja, mit VKKeyScan oder einfach mit "ord"

luckystar85 2. Okt 2005 17:57

Re: Tastaturcode bekommen
 
Mit Ord ist das nicht der gleiche Wert. Bsp. a = 65 in OnKeyPress und Ord a = 97. Mit Ord hatte ich das auch schon probiert nur leider ging das nicht. Habt Ihr noch andere Ideen?

SirThornberry 2. Okt 2005 18:04

Re: Tastaturcode bekommen
 
das hängt dann eher damit zusammen das ord('a') nicht das gleiche ist wie ord('A').
Desweiteren schreibst du einmal was von OnKeyPress und das andere mal was von OnKeyDown. Da gibt es einen Unterschied (siehe Hilfe und Typ des übergabeparameters).

Robert Marquardt 2. Okt 2005 18:18

Re: Tastaturcode bekommen
 
Man muss natuerlich lernen was man da wirklich kriegt.
Von der Tastatur bekommt man zuerst Scan Codes. Diese werden mit Hilfe des aktuellen Tastaturlayouts in virtuelle Keycodes uebersetzt.
Bis hierhin lebt man noch in der Welt der Tasten nicht der Zeichen. Es gibt also noch gar kein kleines a.
Erst die naechste Uebersetzungsstufe macht daraus Zeichen. Erst dann macht das kleine a ueberhaupt Sinn.
VK_A ist also Ord('A') nicht Ord('a').
Die ganze Tastaturverwaltung ist noch erheblich komplizierter.
Da gibt es z. B. noch die Dead Keys. Das sind die Tasten die erst nach der folgenden Taste ueberhaupt ein Zeichen ergeben.

OnKeyDown und OnKeyUp entsprechen den Windows-Messages WM_KEYDOWN und WM_KEYUP. Diese operieren auf virtuellen Keycodes.
Erst die Verarbeitung der Messages mit TranslateMessage erzeugt dann WM_CHAR Messages die OnKeyPress entsprechen. Dort bekommt man dann Zeichen.
Die Umsetzung ist nicht 1 zu 1. WM_KEYDOWN : VK_SHIFT, WM_KEYDOWN : VK_A, WM_KEYUP : VK_A, WM_KEYUP : VK_SHIFT loest nur ein WM_CHAR : 'a' aus.

luckystar85 2. Okt 2005 18:22

Re: Tastaturcode bekommen
 
Also kann ich wenn ich immer mit Ord(UpperCase(Zeichen)) den Tastaturcode bekommen?

SirThornberry 2. Okt 2005 19:31

Re: Tastaturcode bekommen
 
@Luckystar: am besten du sagst uns um welches ereignis es geht, um OnKeyDown oder um OnKeyPress?

luckystar85 2. Okt 2005 19:32

Re: Tastaturcode bekommen
 
Wie in meinen ersten Posting erwähnt OnKeyDown.

Robert Marquardt 3. Okt 2005 05:00

Re: Tastaturcode bekommen
 
Nur fuer die Ziffern 0..9 und die Buchstaben A..Z stimmen virtueller Keycode und ASCII Code ueberein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 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