Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Automatische Anzeige der virt. Tastatur unterdrücken (https://www.delphipraxis.net/211080-automatische-anzeige-der-virt-tastatur-unterdruecken.html)

hotrs02 4. Aug 2022 09:27

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
@einbeliebigername
Zunächst danke für deine Bemühungen. Vielleicht kann ich mich irgendwann einmal revanchieren.

Zitat:

Zitat von einbeliebigername (Beitrag 1509719)
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.

Tatsächlich lässt sich damit die automatische Anzeige der virt. Tastatur so unterdrücken, wie wir es benötigen würden. Allerdings bleibt hier noch das Problem der Auswertung der Tastatureingaben, welche ein TEdit mit der Eigenschaft ReadOnly = TRUE natürlich einfach ignoriert. Und da wir die virt. Tastatur nur gezielt unterbinden möchten, könnte ich hier einfach direkt auf ein TEdit mit der Eigenschaft ReadOnly = TRUE zurückgreifen und auf das UIAutomation Framework verzichten.

Bis auf weiteres haben wir uns für die Lösung mit den doppelten Steuerelementen und der Steuerung der Sichtbarkeit entschieden. Damit erreichen wir in unserem Fall die größte Flexibilität.


Zitat:

Zitat von einbeliebigername (Beitrag 1509719)
Vieleicht ist ja das SetInputScope und der Verzicht auf eine eigene Tastatur die bessere Variante.

In unserem Anwendungsfall ist das leider wenig zielführend. Unsere virt. Tastatur verfügt über zusätzliche Funktionalität (Auslösung bestimmter Aktionen), die jederzeit erreichbar sein muss.

hotrs02 4. Aug 2022 09:28

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1509729)
Ich wollte nur dalassen dass sich bei MS noch keiner dazu geäußert hat, aber vielleicht kommt da ja noch was...

Danke für das Update!

himitsu 4. Aug 2022 10:51

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Zitat:

Zitat von einbeliebigername (Beitrag 1509719)
Doch die gibt es auch.
Anhang 55276

OK, aber auch erst nach Umschalten.
Kein Direktdrücken für eine Schnellwahlfunktion.

Für F-Tasten immer stichtbar und Zahlen als Zehnerblock wäre mehr als ausreichend genug Platz. :cry:

himitsu 4. Aug 2022 16:51

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Joar, also bezüglich SetInputScope gibt es noch garkeine Meldungen auf https://quality.embarcadero.com


und beim Anderen .... joar, hatte schon wieder ganz vergessen, aber da hat sich eh nichts getan :freak:
https://quality.embarcadero.com/brow...Description%22

einbeliebigername 8. Aug 2022 15:43

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe noch weiter geforscht. Mir fehlt ja noch das Reagieren auf das Ein-/Aus-blenden der Tastatur. Ich habe mit den Schlagwörtern und Bezeichnern von der Seite https://docs.microsoft.com/de-de/win...touch-keyboard die Suchen gequält.

Bei einer Suche für dieses Thread bin ich mal auf den Blogbeitrag (https://blogs.embarcadero.com/de/delphi-winui-3-demo/) von Embarcadero zum Thema Win UI 3 gestoßen. Dort geht es eigentlich mehr um XAML, aber man ist ja schon etwas verzweifelt und greift nach dem kleinsten Strohhalm. Ich hatte auch schon das Demo-Projekt aus GetIt auf der Platte und bin mit einem Bezeichner fündig geworden.

In der Unit
Delphi-Quellcode:
Winapi.UI.ViewManagement
gibt es die Klasse
Delphi-Quellcode:
TCore_CoreInputView
mit der Klassenmethode
Delphi-Quellcode:
GetForCurrentView
. Diese gibt ein Interface vom Type
Delphi-Quellcode:
Core_ICoreInputView
zurück, welches unteranderem zwei Funktionen
Delphi-Quellcode:
TryShowPrimaryView
und
Delphi-Quellcode:
TryHidePrimaryView
kennt. Ich habe das mal ausprobiert (aktualisiertes Projekt im Anhang). Bei mir geht mit den Funktionen die Bildschirmtastatur auf und zu.

Bloß mit dem OcclusionsChanged werde ich nicht ganz warm. Die Liste, welche man da bekommt, ist sehr oft leer. Und bei dem OcclusionKind hab ich bis jetzt nur Floating gesehen.

Nun gilt es an die richtigen Interfaces zu kommen. Mich interessiert z.B.:
Delphi-Quellcode:
  Core_ICoreInputView4 = interface(IInspectable)
  ['{002863D6-D9EF-57EB-8CEF-77F6CE1B7EE7}']
    function add_PrimaryViewShowing(handler: TypedEventHandler_2__Core_ICoreInputView__Core_ICoreInputViewShowingEventArgs): EventRegistrationToken; safecall;
    procedure remove_PrimaryViewShowing(token: EventRegistrationToken); safecall;
    function add_PrimaryViewHiding(handler: TypedEventHandler_2__Core_ICoreInputView__Core_ICoreInputViewHidingEventArgs): EventRegistrationToken; safecall;
    procedure remove_PrimaryViewHiding(token: EventRegistrationToken); safecall;
  end;

Der schöne Günther 8. Aug 2022 18:57

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Du warst schneller, den IInputView hatte MS jetzt auch:

Zitat:

Emily Bender

Howdy, I believe this may help: CoreInputView.PrimaryViewShowing Event (Windows.UI.ViewManagement.Core) - Windows UWP applications | Microsoft Docs

There's a function called TryCancel, so when the SIP wants to show, in your handler you call TryCancel

LMK if there's more help i can provide, a thread over mail may be helpful as I can loop in relevant text input devs who can help debug

hotrs02 9. Aug 2022 15:38

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Vielen Dank an euch beide für eure Mühen.

Das kommt genau richtig, der Ansatz mit dem doppelten, schreibgeschützten Eingabefeldern hat nämlich leider doch einen Haken. Wir nach auf von TEdit.SetFocus das Eingabefeld erneut angeklickt, so öffnet sich letztendlich doch leider noch die Tastatur.

Ich werde mir die Tage die genannte Schnittstelle genauer anschauen.

einbeliebigername 9. Aug 2022 23:39

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Zitat:

Zitat von Der schöne Günther (Beitrag 1509897)
Du warst schneller,

Ach, ich schnell ... ne.

Zitat:

Zitat von Der schöne Günther (Beitrag 1509897)
den IInputView hatte MS jetzt auch:

Ne, MS hat das bestimmt schon länger. Wir haben es jetzt teilweise auch. Es fehlt noch vieles.

Zitat:

Zitat von Der schöne Günther (Beitrag 1509897)
Zitat:

Emily Bender

Howdy, I believe this may help: CoreInputView.PrimaryViewShowing Event (Windows.UI.ViewManagement.Core) - Windows UWP applications | Microsoft Docs

There's a function called TryCancel, so when the SIP wants to show, in your handler you call TryCancel

LMK if there's more help i can provide, a thread over mail may be helpful as I can loop in relevant text input devs who can help debug

Ich habe bei meinem Testprojekt weiter gemacht (aktualisierte Version im Anhang) und soweit vollständig vorhanden die Events implementiert. Für das enthaltene Memo habe ich das TryCancel beim PrimaryViewShowing mal umgesetzt.

Es funktioniert wenn man die Bildschirmtastatur generell nicht aufgehen lassen will (also immer ein TryCancel macht, aber ich habe das bei Anwendungswechsel noch nicht getestet). Das Problem ist, dass dieses PrimaryViewShowing bei jedem Focuswechsel gefeuert wird, auch wenn die Bildschirmtastatur schon eingeblendet ist. Wenn man das TryCancel aufruft wenn die Tastatur bereits eingeblendet ist, geht diese nicht zu und kommt etwas durcheinander. Sie schließt sich dann nicht mehr automatisch. Leider fehlt noch eine Möglichkeit abzufragen ob die Tastatur eingeblendet ist.

Beim stöbern in der MS-Doku bin ich auf CoreTextEditContext.InputPaneDisplayPolicy gestoßen. Damit soll man das automatische Einblenden der Tastatur abschalten können. Der nötige Aufzählungstyp ist auch schon in der Unit Winapi.UI.Text vorhanden. Aber das entsprechende Interface fehlt.

hotrs02 16. Aug 2022 13:46

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Ich hatte heute Zeit, mir dein letztes Beispielprojekt einmal genauer anzuschauen. Leider funktioniert die Unterdrückung der virt. Tastatur auf dem verwendeten Handheld auf Grund der Verwendung von Windows 10 Enterprise LTSC (Version 1809) nicht: das Interface Core_ICoreInputView4 wird von dieser Windows Version noch nicht unterstützt, es wurde laut Dokumenation erst in Version 2004 eingeführt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr.
Seite 4 von 4   « Erste     234   

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