Einzelnen Beitrag anzeigen

einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#26

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 3. Aug 2022, 20:35
Hallo,

ich habe weitergeforscht und bin etwas weitergekommen.

Wenn man der Seite https://docs.microsoft.com/de-de/win...touch-keyboard Glauben schenkt, sollte das UiAutomation noch funktionieren. Desweiteren fand ich im Internet eine Hinweis auf die Funktion SetInputScope(hwnd: HWND; inputscope: TInputScope): HRESULT; mit der man das Tastaturlayout beeinflussen kann.

Ich habe mal Delphi 11 installiert und meine Änderungen bzgl. UiAutomation aus dem Kundenprojekt raus gelöst und in ein Testprojekt (Dp211080.AutomatischeAnzeigeDerVirtTastaturUnterdruecken.zip) gebracht. Einiges von dem Sourcecode ist Copy/Past aus dem Internet. Woher kann ich nicht mehr ermitteln. Auch habe ich SetInputScope eingebaut.

Das UiAutomation-Zeugs wird noch durchlaufen. Mit dem SetInputScope lässt sich die automatisch eingeblendete Tastatur bzgl. des Layouts auch beeinflussen (z.B. nur Zahlen). Wenn man das ReadOnly des Edits auf True setzt und bei dem Get_IsReadOnly eine 0 zurück gibt, geht die Tastatur auch automatisch auf. Dann aber immer mit dem Standartlayout. Also das SetInputScope gehört zu dem Standartverhalten. Und wenn man kein Standart-Control hat, hilft das UiAutomation.

Vieleicht findet ja jemand mit den Infos noch den richtigen Einstieg in die Doku. Ich finde die Dokumentation bei Microsoft mittlerweile als nervend, weil man bei der Suche viel zu oft bei dem XAML-Zeugs landet. Und damit kann man in der VCL absolut nichts anfangen.

Aber jetzt noch zu Embarcadero. Was ich nicht verstehe, wieso haben die das SetInputScope nicht schon längst eingebaut. Für einen Entwickler ist das eine halbe Stunde.

Ich habe noch einen weiteren Lösungsansatz gefunden: mir war aufgefallen, dass ein TEdit.SetFocus die virt. Tastatur nicht anzeigt.
Bei einem TEdit.SetFocus wird zwar auch das Ui-Zeugs durchlaufen, aber die Tastatur wird dadurch nicht beeinflusst. Also sie bleibt eingeblendet wenn sie eingeblendet war und bleibt ausgeblendet wenn sie ausgeblendet war. Wie man dann aber den Focus logikgesteuer versetzen kann mit automatischen ein/ausblenden der Tastatur ist mir ein Rätsel.

Also habe ich zunächst versucht, in TEdit.OnClick oder TEdit.OnEnter die Eigenschaft ReadOnly auf FALSE zu setzen. Die Tastatur wurde aber leider weiterhin angezeigt. Dann habe ich mit einem Timer experimentiert, der in TEdit.OnClick / TEdit.OnEnter gestartet wird und nach einer Zeitspanne (250ms) die Eigenschaft ReadOnly auf FALSE setzt. Leider ebenfalls Fehlanzeige.

Was aber funktioniert ist, einfach zwei TEdit übereinander zu legen und die Sichtbarkeit zu steuern. Das obere TEdit hat die Eigenschaft ReadOnly auf TRUE gesetzt, das darunter liegende auf FALSE. Das obere ist zunächst sichtbar, das untere nicht. In OnEnter des oberen TEdit wird dann die Sichtbarkeit beider TEdit umgeschaltet, was letztendlich zu dem gewünschten Verhalten führt. Elegant finde ich die Lösung allerdings nicht.
Das klingt für mich mehr nach Hacken. Das wird dir bestimmt in ein paar Jahren um die Ohren fliegen.

Ich werde mir jetzt auch mit Hinblick auf den Aufwand für die Anpassung älterer Dialoge überlegen müssen, welche Lösung ich umsetze.
Vieleicht ist ja das SetInputScope und der Verzicht auf eine eigene Tastatur die bessere Variante.

Bei einem PC ohne Tastatur und mit Touch geht inzwischen die virtuelle Tastatur auf,
aber ich finde die "wichtige" Option im Windows nicht mehr.
Ich glaube die gibt es nicht mehr, wie im nicht Tabletmodus das Tastaturicon zum manuellen einblenden der Tastatur (*). Aber im Tabletmodus ist die Taskleiste leer, obwohl mehrere Anwendungen offen sind. Ich kann ja verstehen, dass man im Tabletmodus einiges anders macht, aber wie kann man da zwischen den laufenden Anwendungen wechseln. Manchmal frag ich mich, was für Zeugs die bei Microsoft konsumieren.

Allerdings geht Sie (die angedockte Tablettastatur) immer erst beim zweiten Klick/Tippen ins Edit auf, was schon etwas blöd ist, wenn jemand nicht direkt weiß, dass es eine virtuelle Tastatur gibt.
Bei mir zum Glück nicht immer. Aber beim Notepad ist es genauso. Und beim Paserver-Fenster habe ich schon beinahe den Finger durchs Display gedrückt, weil die Tastatur absolut nicht aufgehen wollte.

Dagegen ist das "freifliegende" OSK schon bissl blöd, denn beim Verschieben der Tastatur bekommt sie den Fokus und man muß immer erst wieder ins Edit reinklicken, damit die Tastatur funktioniert.
Und da das Drecksding immer im Weg ist, muß man es ständig verschieben.
Die Tastatur welche man im Startmenu bzw. den Einstellungen aufmachen kann, ist eine andere. Die ist echt unbrauchbar. Die automatisch Eingeblendete kann man ja auch freifliegend machen und die verhält sich schön smooth.

Außerdem, wer kommt bitte auf die saublöde Idee eine Tastenkombination für das Aufgehen der Virtuellen zu bauen
Ja die sollten weniger konsumieren.

Außerdem verwenden wir im Programm viel die F-Tasten, welche aber in der Tablettastatur komplett fehlen
Doch die gibt es auch.
windows10bildschirmtastaturmitfunktionstasten.png


*
Die Tablettastatur (vermutlich die TabTip.exe) bekommt man ebenfalls, wenn man im Kontextmenü der Uhr das "Bildschirmtastatur anzeigen (Schaltfläche)" aktiviert und dann auf den Knopf drückt.
Jetzt schau ich nochmal durch, ob ich zu allem, wo ich Antworten wollte, auch was geschrieben habe und sehe da steht ja die Lösung. Vielen Dank. Ich suche in den Einstellungen zu der Tastatur und versuche jeden Buchstaben einzeln zu verstehen. Was macht die Einstellung an dieser Stelle? Sollte man die Drogenfahndung informieren?
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat