Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Es ist ganz einfach: Die Variable Key in einer OnKeyPress-Routine enthält immer das Zeichen, der gedrückten Taste. Je nach Anwendungszweck kann es unterschiedlich sinnvoll sein, das Ereignis OnKeyPress von einer Komponenten (z.B. einem Edit) oder von der gesamten Form zu nehmen. Was möchtest du denn bei Tastendruck machen? Vielleicht kann ich dir noch genauer helfen.
Das mit der Variable Key hab ich auch schon rausgefunden, das hilft
mir bloß leider nicht weiter. Auf die Windows API kann ich auch nicht
gehen, weil ich das für Kylix, also unter Linux brauche. Es geht
darum, daß ich mir ein Tool schreiben will, mit dem ich die Tasten auf
meinem Multimedia Keyboard beliebig programmieren kann. Und die Key
Variable zeigt mir diese Tastaturcodes von den betroffenen Tasten
nicht an. Aber irgendein Signal muß doch gesendet werden, jetzt muß
ich nur noch rausfinden wie ich es abfangen kann.
Axe
Hehe ) Das hab ich auch schon probiert. Meine Tastatur hat auch verschiedene Sondertasten, die ich leider überhaupt nicht abfangen kann. Bei mir ist es so, ich eine Anwendung vom Hersteller im Hintergrund laufen muss, damit die Taste registriert. Daher denke ich, dass es sich dabei gar nicht um einen Tastendruck im Sinne der anderen Taste handelt, sondern die Software direkt die Hardware anfängt ohne dabei Nachrichten zu erhalten oder zu senden. Ich persönlich hab schon aufgegeben, da eine Lösung zu finden ....
Trotzdem noch viel Glück, Tobia
Hallo,
Mit einer Ereignisbehandlungsroutine für OnKeyDown können beim Drücken einer Taste bestimmte Aktionen durchgeführt werden. In dieser Routine kann auf alle Tasten einschließlich Funktionstasten und Tastenkombinationen mit UMSCHALT-, ALT- und STRG-Taste sowie auf gedrückte Maustasten reagiert werden.
Der Typ TKeyEvent zeigt auf eine Methode, die Tastaturereignisse behandelt.
Der Parameter Key gibt die gedrückte Taste an. Bei nicht alphanumerischen Tasten können Sie die gedrückte Taste mit den virtuellen Tastencodes der Windows-API feststellen. Weitere Informationen finden Sie unter Virtuelle Tastencodes.
Der Parameter Shift gibt an, ob die Taste UMSCHALT, ALT oder STRG zusammen mit der betreffenden Taste gedrückt wurde.
Mit einer Ereignisbehandlungsroutine für OnKeyPress können bestimmte Aktionen durchgeführt werden, wenn eine einzelne Zeichentaste gedrückt wird.
Da der Parameter Key den Datentyp Char hat, registriert das Ereignis OnKeyPress das ASCII-Zeichen der gedrückten Taste. Tasten, die keinem ASCII-Char-Wert entsprechen (z.B. UMSCHALT oder F1), generieren kein Ereignis OnKeyPress. Tastenkombinationen (z.B. UMSCHALT+A) führen nur zu einem Ereignis OnKeyPress (in diesem Beispiel ergibt UMSCHALT+A den Key-Wert „A“, wenn die Feststelltaste deaktiviert ist). Soll auf Nicht-ASCII-Tasten oder Tastenkombinationen reagiert werden, verwenden Sie die Ereignisbehandlungsroutine für OnKeyDown oder OnKeyUp.
Das waren Ausschnitte aus der Hilfe über beide Ereignisse. Jedes wertet etwas anderes aus. -wichtig-
Wichtig ist auch, dass die Eigenschaft "KeyPreview" der Form auf true steht. Ansonsten schreibe ich in das Ereignis OnKeyPress
Showmessage(key);
und in OnKeyDown
ShowMessage(IntToStr(key));
Dann siehst du, welche Taste du gedrückt hast. Unbedingt auch mal die Hilfe zu den "Virtuellen Tastencodes" ansehen. Nicht mit ASCII-Code verwechseln.
Vielen dank, das funktioniert schon mal. Bloß bei den zusätzliche multimedia Tasten auf der Tastatur bekomme ich immer die gleiche Zahl beim Parameter Key, nämlich 255. Bedeutet das, daß Delphi automatisch das letzte Zeichen nimmt, wenn es die Taste nicht erkennt?
Gruß,
Axe
Ich konnte das jetzt nur an den neuen Windows-Tasten nachvollziehen, diese geben einen Wert (91 bzw die Taste für Menüs 93) im Ergeignis KeyDown mit
<pre>
showmessage(inttostr(key));
</pre>
zurück.
Irgendwas müssen die Tasten doch senden...gibt es eine Möglichkeit noch eine Ebene tiefer zu gehen udn versuchen so ziemlich alles abzufangen was Windows an Botschaften bekommt?
Gruß, Axel Steine
Ist das ein USB-Keyboard?<br>
Wenn ja dann wird es schon unter Windows schwierig, da die Multimedia-Keys im PC-Tastenschema bisher nicht vorgesehen waren.<br>
Unter Windows glaube ich das der USB-Treiber diese Tasten auswertet. Geht wahrscheinlich sowieso erst ab WinME.<br>
Was X-Window zu neuen Tasten agt weiss ich nicht
Comment