AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTouchKeyboard im Kampf mit echten Tastaturen

Ein Thema von Der schöne Günther · begonnen am 4. Jul 2017 · letzter Beitrag vom 3. Nov 2017
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 4. Jul 2017, 18:27
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 TTouchKeyboard 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: TouchKeyboard1.Perform(CM_INPUTLANGCHANGE, WPARAM(0), LPARAM(0)); Meine Frage wäre: Wann?
  1. Mich mittels globalem Keyboard-Hook einklemmen und das jedes mal tun wenn jemand Shift oder Capslock drückt
  2. In irgendeinem KeyDown-Event auf jedem Formular/Frame das ein TTouchKeyboard hat
  3. Eine andere, elegante Möglichkeit
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 4. Jul 2017, 19:28
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 4. Jul 2017, 20:16
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.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 4. Jul 2017, 20:51
Die virtuelle Tastatur sollte aber niemals den Eingabefokus bekommen und somit doch eigentlich auch keine WM_KEY bekommen.
Stimmt auch wieder.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 2. Nov 2017, 19:36
Ideen werden weiterhin dankend entgegengenommen
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 3. Nov 2017, 12:33
Die OSK selber in der eigene Anwendung verwenden? Wäre das eine Option?
https://stackoverflow.com/questions/...ard-in-wpf-app
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 3. Nov 2017, 12:38
Das Windows-OSK starten und mit SetParent in die eigene Oberfläche einbetten? Da fürchte ich mich ehrlich gesagt vor.
  • Irgendein Windows-Update verändert vielleicht das OSK und das fliegt der Software dann um die Ohren
  • Bestimmt Probleme zwischen Admin-Prozess/Nicht-Admin-Prozess
  • Bestimmt Merkwürdigkeiten wenn der Nutzer weiterhin das "normale" Windows-OSK öffnen will.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TTouchKeyboard im Kampf mit echten Tastaturen

  Alt 3. Nov 2017, 13:05
Das Windows-OSK starten und mit SetParent in die eigene Oberfläche einbetten? Da fürchte ich mich ehrlich gesagt vor.
  • Irgendein Windows-Update verändert vielleicht das OSK und das fliegt der Software dann um die Ohren
  • Bestimmt Probleme zwischen Admin-Prozess/Nicht-Admin-Prozess
  • Bestimmt Merkwürdigkeiten wenn der Nutzer weiterhin das "normale" Windows-OSK öffnen will.
Wer nicht wagt, der nicht gewinnt!

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!
Vielleicht gelingt es dir per API-Monitor (http://www.rohitab.com/apimonitor) rauszuknobeln, welche Funktionen dafür aufgerufen werden und das in einer eigenen Ableitung von TTouchScreenKeyboard zu integrieren.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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