Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alternative für: Chr() gesucht (https://www.delphipraxis.net/122822-alternative-fuer-chr-gesucht.html)

napsterxx 22. Okt 2008 16:06


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

napsterxx 22. Okt 2008 23:29

Re: Alternative für: Chr() gesucht
 
Leider funktionieren beide Methoden hier nicht:
Delphi-Quellcode:
var
  I: Integer;
begin
  for I := 3 to 200 do
  if GetAsyncKeyState(I) = -32767 then
    Edit1.Text := Edit1.Text+chr(i);
end;
Es wird zwar "ABCDE" und "0724" angezeigt, halte ich aber die SHIFT Taste gedrückt so steht kein "$ oder ein !" da.

Medium 22. Okt 2008 23:36

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.

napsterxx 23. Okt 2008 13:44

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:
PostMessage(Edit1.Handle, WM_KEYDOWN, Msg.WParam, Msg.LParam);
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.


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