TForm1.Edit1KeyPress var Key nicht alle Zeichen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
Beiträge: 170
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

TForm1.Edit1KeyPress var Key nicht alle Zeichen

Beitrag von NoCee »

Hallo zusammen,

ich hab ein kleines Programm mit einem TEdit bei dem ich mit OnKeyPress nicht anzeigbare Zeichen abfange und diese
hexadezimal anzeige. Jetzt hab ich damit 2 Probleme von denen ich beide nicht gebacken bekomme und eins schon gleich gar nicht verstehe.

1: Wenn ich von einem Tastaturemulator (Barcodescanner wie im Klamottenladen) den Wert hex 0 bekomme, passiert gar nichts.
Ich bekomme aber bei der Auswertung von der Übergabewertvariablen "Key" auch keine hex 0 oder sonst was bei myvar:=chr(Key)
weil OnKeyPress scheinbar gar nicht aufgerufen wird, kanns also auch nicht hex ausgeben und geht somit flöten.
2: Wenn ich hier Hexwerte C3 bis A4 bekomme, gibt mit chr(Key) immer nur hex 3F (= ?)aus, darüber tuts wieder.

Ich muß aber alles was der Barcodescanner schickt anzeigen, in Klartext bei Ziffern und Buchstaben in hex bei allen anderen Werten,
damit ich sehen kann, daß da Werte geschickt werden (z.B. Steuerzeichen) und da sollte halt hex 0 und C3 bis A4 auch dabei sein

Hat da einer nen Plan wie man das lösen kann und warum das (speziell bei Punkt 2) so ist?

Gruß
NoCee

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: TForm1.Edit1KeyPress var Key nicht alle Zeichen

Beitrag von theo »

Keine Ahnung wovon du sprichst, aber die Existenz von OnUTF8KeyPress ist dir bewusst?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TForm1.Edit1KeyPress var Key nicht alle Zeichen

Beitrag von Socke »

NoCee hat geschrieben:1: Wenn ich von einem Tastaturemulator (Barcodescanner wie im Klamottenladen) den Wert hex 0 bekomme, passiert gar nichts.

Im Quelltext habe ich das hier gefunden:

Code: Alles auswählen

if CharCode = VK_UNKNOWN then Exit;

Vermutlich musst du also die Methode TWinControl.DoKeyDownBeforeInterface() überschreiben, damit VK_UNKNOWN (= 0) ebenfalls ein Event auslöst.

NoCee hat geschrieben:Ich muß aber alles was der Barcodescanner schickt anzeigen, in Klartext bei Ziffern und Buchstaben in hex bei allen anderen Werten,
damit ich sehen kann, daß da Werte geschickt werden (z.B. Steuerzeichen) und da sollte halt hex 0 und C3 bis A4 auch dabei sein

Was schickt er denn und in welcher Zeichenkodierung? Die LCL verwendet immer UTF-8 als Kodierung; daher musst du deine Eingabe ggf. konvertieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

NoCee
Beiträge: 170
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: TForm1.Edit1KeyPress var Key nicht alle Zeichen

Beitrag von NoCee »

Hallo,



theo hat geschrieben:Keine Ahnung wovon du sprichst, aber die Existenz von OnUTF8KeyPress ist dir bewusst?


OnUTF8KeyPress kannte ich bisher nicht. Ich bin ein bischen naiv davon ausgegangen, daß mir myvar:=ord(Key) von TEdit1.OnKeyPress
alles von 0 bis 255 liefert, was in der Tastatur eingegeben wurde. Das Turbo Pascal und Dos-Zeiten vorbei sind, wo das meines wissens
so war, hab ich jetzt wieder mal feststellen müssen.
Die Methode TWinControl.DoKeyDownBeforeInterface() zu überschreiben wie Socke das geschrieben hat, geht mir als Anfänger zu tief ins
Eingemachte. Mir reicht aber schon mal zu wissen, daß bei Eingabe einer hex0 einfach nichts aufruft.
Aufgrund des Stichwortes VK_UNKNOWN hab ich jetzt auch mitbekommen, daß es diese virtuellen Tastaturcodes gibt.

Socke hat geschrieben:Was schickt er denn und in welcher Zeichenkodierung? Die LCL verwendet immer UTF-8 als Kodierung; daher musst du deine Eingabe ggf. konvertieren.


Der Scanner wird als USB-HID Gerät von Windows erkannt und als Tastatur eingebunden. Ich kann dem Gerät nur sagen, er soll nach den
Zahlen bzw-. Buchstaben die er im Barcode ließt ein Byte anhängen. Hier kann ich alles von hex0 bis hexff angeben. Meistens wird da
hex0d "CR" benutzt. Wie das intern USB/Windows funktioniert, weiß ich leider absolut nicht.

Ich hab jetzt erstmal ein paar Stichworte die ich mir genauer anschauen werden.

Insofern danke ich euch mal für die Hilfe
(Es gibt halt noch viel zu tun :) )
Gruß
NoCee

Antworten