Alternative für: Chr() gesucht
Moin moin,
also ich lasse mir anzeigen welche Taste gedrückt wurde, genauer gesagt den Virtualkey Code der Taste. Für ein A z.B. 65. Nun wollte ich dies Taste als Klartext einer Editbox anzeigen lassen. Derzeit mache ich das so: Edit1.Text := Chr(MyVK); aber bei anstatt einem "-" zeigt er komische Symbole an, kann ich da was drehen?^^ // Edit http://delphi.about.com/od/adptips2006/qt/vkey2char.htm |
Re: Alternative für: Chr() gesucht
Leider funktionieren beide Methoden hier nicht:
Delphi-Quellcode:
Es wird zwar "ABCDE" und "0724" angezeigt, halte ich aber die SHIFT Taste gedrückt so steht kein "$ oder ein !" da.
var
I: Integer; begin for I := 3 to 200 do if GetAsyncKeyState(I) = -32767 then Edit1.Text := Edit1.Text+chr(i); end; |
Re: Alternative für: Chr() gesucht
VK-Codes sind ja auch keine ASCII Repräsentation, bzw. gilt das lediglich für die "normalen" Buchstaben, wobei selbst da dann nicht zwischen Groß- und Kleinschreibung unterschieden würde. Du hast, soweit ich das gefunden habe, drei Möglichkeiten:
1) TranslateMessage() um eine WM_KEYDOWN Message in eine WM_CHAR Message konvertieren zu lassen, die das entsprechende Zeichen incl. Berücksichtigung von Alt, Shift usw. enthält. 2) GetKeyNameText() um eine String-Repräsentation des VK-Codes zu erhalten ("VK_1", "VK_F" usw.), was aber wohl eher nicht der Brüller ist, wenn man dann alle Fälle durch ein if-then-else-Monster durchgehen müsste. 3) MapVirtualKey() ist mein Favorit. Nimmt VK-Codes oder Scandcodes entgegen, und bastelt sie je nach Wunsch (Parameter) zu einem Scancode, VK-Code oder eben einem Character um. |
Re: Alternative für: Chr() gesucht
ich mache es derzeit mit einem Tastaturhook, allerdings habe ich ein kleines Problem. Wenn die Tasten ankommen mache ich folgendes:
Delphi-Quellcode:
Dies funktioniert sehr gut, jedoch wenn ich besonders schnell schreibe kann es vorkommen, dass mehrere gleiche Zeichen wie etwas "((((((((((((" angezeigt werden obwohl ich es nur einmal gedrückt und nicht gedrückt gelassen habe.
PostMessage(Edit1.Handle, WM_KEYDOWN, Msg.WParam, Msg.LParam);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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