![]() |
TTouchKeyboard im Kampf mit echten Tastaturen
Die Windows-Bildschirmtastatur bekommt es mit wenn man auf einer echten Hardware-Tastatur Shift oder Capslock drückt. Das TTouchKeyboard in der VCL leider nicht. So kann es passieren dass man auf einer echten (oder virtuellen) Tastatur Capslock aktiviert und sich fortan wundert warum man in einer VCL-Anwendung auf dem TTouchkeyboard die Taste "4" drückt und ein "$" rauskommt.
Gibt es eine einfache Lösung hierfür? Das
Delphi-Quellcode:
bekommt z.B. den Wechsel des Tastaturlayouts (andere Sprache) völlig souverän mit und ändert sich, richtig cool. Ich kann diesen Neuaufbau forcieren indem ich der Tastatur eine CM_INPUTLANGCHANGE-Nachricht sende:
TTouchKeyboard
Delphi-Quellcode:
Meine Frage wäre: Wann?
TouchKeyboard1.Perform(CM_INPUTLANGCHANGE, WPARAM(0), LPARAM(0));
|
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Du könntest auch eine Ableitung (Interposer-Class) von TTouchKeyboard verwenden, das z.B. einen Message-Handler für WM_KEYDOWN, WM_KEYUP implementiert und auf VK_CAPITAL reagiert.
(nicht ausprobiert!)
Delphi-Quellcode:
type
TTouchKeyboard = class(Vcl.Touch.Keyboard.TTouchKeyboard) protected procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP; end; procedure TTouchKeyboard.WMKeyUp(var Message: TWMKeyUp); begin inherited; if Message.CharCode = VK_CAPITAL then begin SendMessage(Handle, WM_INPUTLANGCHANGE, 0, 0); end; end; |
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Kann es sein, dass das TouchKeyboard Probleme hat, wenn die Anwendung nicht den Fokus hat und man da den Status ändert?
Das selbe Problem sollte dann aber auch auftauchen, wenn man eine andere virtuelle Tastatur zwischendrin nutzt oder z.B. RDP/TeamViewer/... TTouchKeyboard.WMKeyUp ? Die virtuelle Tastatur sollte aber niemals den Eingabefokus bekommen und somit doch eigentlich auch keine WM_KEY bekommen. :gruebel: Der Fokus bleibt eigentlich in dem Edit, wo man was rein schreibt. Wenn was übersehen wurde, dann könnte man vielleicht allgemein bei KeyUp KeyDown auf alle Tasten reagieren. Die Locked-Keys reagieren auf das Niederdrücken, mit der Statusänderung, und auch bei den anderen Tasten ist bereits der Status während des Niederdrückens wichtig. Dort vor der Tastenbehandlung (inherited) den aktuellen Status des Tastaturpuffers mit dem des TTouchKeyboard vergleichen und bei Differenzen das WM_INPUTLANGCHANGE losschicken. Alternativ auch beim Activate der Application den aktuellen Status neu laden. |
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Zitat:
|
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Ideen werden weiterhin dankend entgegengenommen :love:
|
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Die OSK selber in der eigene Anwendung verwenden? Wäre das eine Option?
![]() |
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Das Windows-OSK starten und mit SetParent in die eigene Oberfläche einbetten? Da fürchte ich mich ehrlich gesagt vor.
|
AW: TTouchKeyboard im Kampf mit echten Tastaturen
Zitat:
Also das OSK scheint richtig tief im System drin zu stecken. Wenn ich da die Feststelltaste drücke, dann leuchtet die LED dazu auf meiner Hardwaretastatur auf! :shock: Vielleicht gelingt es dir per API-Monitor ( ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz