Entwickler-Ecke

Sonstiges (Delphi) - Standard Tastenbehandlung in Formular ändern


flieger-michl - Sa 08.01.11 09:18
Titel: Standard Tastenbehandlung in Formular ändern
Hallo liebe Entwicklergemeinde,

ich schreibe gerade an einer Barcode gestützten Zeiterfassungssoftware.
Jeder Barcode beginnt mit einer Kennung: M = Mitarbeiter P oder A = Projektnummer K = Kostenart

Nach der Kennung kommt eine beliebige Zeichenkette und CR bzw #13 schließt den aktuellen Barcode ab.

Mein Formular hat u.a. 3 Editfelder Personalnummer, Projektnummer und Kostenart.

Da die Daten des Scanners als Tastatureingaben an das Programm geliefert werden, muß ich also in spezieller Weise auf die Tasteneingaben reagieren.

Dazu hatte ich versucht, die Methode wndproc des Formulares zu überschreiben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TInputTerminalForm.WndProc(var Msg: TMessage);
begin
 if (Msg.Msg >= WM_KEYFIRST) and
    (Msg.Msg <= WM_KEYLAST) then
 begin
  Memo1.Lines.Add(IntToStr(Msg.Msg));
 end;
 inherited;
end;


Das Problem ist nun, daß nix in Memo1 landet. Kann mir einer verraten, wieso?

Gruß
Michl

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Xion - Sa 26.02.11 08:13

Wenn der Scanner Tastatureingaben schickt, dann müsste er ja automatisch in das Memo schreiben, wenn dieses fokusiert ist. Ist das der Fall?

Außerdem ist Msg.Msg meines wissens nach der Message-Typ, nicht der gesendete Buchstabe.

Edit: Das wäre wohl das richtige:
http://msdn.microsoft.com/en-us/library/ms646276%28v=vs.85%29.aspx


jaenicke - Sa 26.02.11 08:17

Weshalb in der WndProc des Formulars nichts ankommt? Weil die Eingabe an das fokussierte Control geschickt werden wie user profile iconXion schon geschrieben hat. Und das wird nicht das Formular sein vermute ich.

Jedenfalls reicht es, wenn du KeyPreview des Formulars auf True setzt. Dann kannst du einfach das OnKeyPress Ereignis des Formulars benutzen. ;-)