Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 25. Jul 2022 13:57

Automatische Anzeige der virt. Tastatur unterdrücken
 
Hi *.*.

Wir haben eine Delphi 11 VCL Applikation, die auf einem Tablet-PC mit aktuellem Windows 10 / 11 ohne angeschlossene Tastatur läuft. Für Eingaben verlassen wir uns in der Regel auf die automatisch angezeigte virt. Tastatur. Allerdings haben wir verschiedene Dialoge, die eine eigene, permanent sichtbare und mit speziellen Knöpfen ausgestattete virt. Tastatur anzeigen.

Für diese Dialoge möchten wir nun die automatische Anzeige der virt. Tastatur bei Anwahl einer TEdit-Instanz per Touch unterbinden. Ich bin dabei auf das Interface ITextInputPanel gestoßen, was aber nicht wie gewünscht funktioniert. Eine einfache Testanwendung mit einem Knopf und einem Eingabefeld macht beim Drücken des Knopfes folgendes:

Delphi-Quellcode:
type
  tEditHack = class(tEdit);

procedure TForm1.Button2Click(Sender: TObject);
var
  TIP: IUnknown;
  Value: Integer;

begin
  tEditHack(Edit1).TipMode := tipDontCare; // autom. Anzeige der Tastatur durch die VCL unterdrücken!

  TIP := nil;
  if Succeeded(CoCreateInstance(CLASS_TextInputPanel, nil,
      CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, TIP)) then
    if Succeeded((TIP as ITextInputPanel).Set_AttachedEditWindow(Edit1.Handle)) then
      if Succeeded((TIP as ITextInputPanel).Set_InPlaceVisibleOnFocus(Integer(False))) then
        begin
          (TIP as ITextInputPanel).Get_InPlaceVisibleOnFocus(Value);
          if Bool(Value) then
            ShowMessage('Get_InPlaceVisibleOnFocus: TRUE')
          else
            ShowMessage('Get_InPlaceVisibleOnFocus: FALSE')
        end
      else
        ShowMessage('Set_InPlaceVisibleOnFocus failed...')
    else
      ShowMessage('Set_AttachedEditWindow failed...')
  else
    ShowMessage('CoCreateInstance failed...');
end;
Trotzdem wird danach bei Anwahl des Eingabefeldes automatisch die virt. Tastatur von Windows aufgerufen.

Wenn man sich nun die Beschreibung zu ITextInputPanel bei Microsoft anschaut, so findet sich dort bereits der Hinweis, dass das Interface in späteren Versionen von Windows ggf. nicht zur Verfügung steht. Stattdessen wird auf IInputPanelConfiguration verwiesen, was aber laut Dokumentation unter Windows 10 nicht funktioniert.

Man muss doch irgendwie innerhalb einer Anwendung das Verhalten der virt. Tastatur beeinflussen können? Hat jemand vielleicht einen entscheidenden Hinweis?

Gruß

Der schöne Günther 25. Jul 2022 15:13

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Unter IInputPanelConfiguration::EnableFocusTracking wird die Doku etwas genauer:

Zitat:

This method will not work in Windows 10. A user can manually configure settings through the notification center or through the Typing settings to enable pulling up a touch keyboard automatically when focusing on an edit control.
Klartext: "Wir bieten keine funktionierende API an, soll der Benutzer doch selber in der Systemsteuerung (die jedes halbe Jahr anders aussieht) sagen ob global ja oder Nö."

Wir haben uns bei unseren Kiosk-Applikationen schon vor länger von dem Windows-Automatismus verabschiedet und machen immer eigene Eingabe-Dialoge mit stinknormalen VCL-Popups. Die funktionieren wenigstens auch bei der nächsten Windows-Halbjahresversion immer noch.

hotrs02 25. Jul 2022 15:25

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Bei einer Kiosk-Anwendung funktioniert das natürlich. Aber halt nicht, wenn auf dem Tablet-PC nicht nur unsere Anwendung genutzt wird.

Wenn sich keine Möglichkeit finden sollte, dann muss der Anwender wohl den Tablet-Mods deaktivieren und die Tastatur bei Bedarf manuell über die Task-Leiste aufrufen.


(Gibt es in der Richtung eigentlich von Microsoft bereitgestellte Foren, in der man eine offizielle Anfrage zu so einer Schnittstelle stellen könnte?)

Der schöne Günther 25. Jul 2022 15:49

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Ich bin bei Microsoft im "Developer TAP" (Technology Adoption Preview)-Programm, da kann man sich mit den Entwicklern austauschen, kann aber etwas dauern. Ich versuche da diese Woche einmal nachzufragen, hatte da auch einmal Beschreibung für eine undokumentierte API für Touchpads bekommen. Aber ich würde ehrlich gesagt da nicht zu viel erwarten.

hotrs02 25. Jul 2022 15:56

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Vielleicht ist es ein Versuch wert.

Vielen dank schonmal.

himitsu 25. Jul 2022 17:21

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
https://stackoverflow.com/questions/...-edit-controls


Da steht notfalls auch, wie man für die eigene Anwendung diese Tastatur komplett deaktiviert.
Selber anzeigen der Tastatur (oder was Alternativem), da wo man sie braucht, müsste man dann noch machen.



Die notmale Bildschirmtastatur ist ja ein Graus.
Im WindowsInstaller, weiß Windows noch, dass keine Tastatur angeschlossen ist und zeigt dort die Virtuelle an,
aber nach dem ersten Start, ist alles wieder vergessen und man muß erstmal wissen, wie man nur per Touch im Startmenü das findet.

Die Option zum Anzeigen ist schnell gefunden, aber die fast versteckte Option die Tablet-Tastatur auch im Desktop-Modus zu nutzen ... damit wird es dann besser, weil Diese Tastatur dann auch Edit/Anwendungen verschiebt, wenn sie auf geht.
(nur Delphi-XE hat noch einen Bug, wenn Tastatur zu und es eigentlich wieder Vollbild wird, aber das Programm dann halb bleibt)
Wenigstens liegt die angedockte Tablet-Tastatur nicht immer ungünstig überm Programm, vorallem immer da, wo man hinklicken wollte.

Auch bissl ungünstig ist, dass man oftmals zwei Mal ins Edit klicken muß, damit die Tastatur auf geht.

einbeliebigername 25. Jul 2022 19:37

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Hallo,

Zitat:

Zitat von Der schöne Günther (Beitrag 1509242)
Klartext: "Wir bieten keine funktionierende API an, soll der Benutzer doch selber in der Systemsteuerung (die jedes halbe Jahr anders aussieht) sagen ob global ja oder Nö."

Nö, das stimmt so nicht ganz. Problem ist man muss den Einstieg finden, dann ist die Docu von Microsoft nicht wirklich die beste und dann muss man das auch noch in die Win32/64-Welt bringen (Alle Meinungen sind zwei, drei Jahr alt, als ich mich mit dem Thema beschäftigt habe).

Die Touch-Tastatur läuft bei Microsoft unter dem Thema erleichterte Bedienung. Dazu zählt z.b. auch alles was man braucht um seine Anwendung für Menschen mit eingeschrängtem Sehvermögen zu öffnen. Und das läuft über das UIAutomation.

Ich würde jetzt gern Sourcecode zeigen, aber das ist nicht meiner. Aber schau mal unter https://github.com/jhc-systems/Delph...omatedEdit.pas. Das sieht sehr ähnlich zu dem was ich damals aus dem Internet zusammenkopiert hatte.

Vollständig verstanden habe ich das auch noch nicht. Und mir fehlt noch das Reagieren auf das Erscheinen und Verschwinden der Tastatur.

Steuern, ob die Tastatur automatisch aufgeht, lässt sich nach meiner Errinnerung durch die Funktion
Delphi-Quellcode:
function Get_IsReadOnly(out pRetVal: Integer): HResult; stdcall;
.
Bei mir sieht die auch so aus:
Delphi-Quellcode:
  if ReadOnly then
    pRetVal := 1
  else
    pRetVal := 0; // Maybe?
  result := S_OK;

hotrs02 26. Jul 2022 12:20

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Zunächst danke für die Hinweise.

Zitat:

Zitat von himitsu (Beitrag 1509247)
https://stackoverflow.com/questions/...-edit-controls
Da steht notfalls auch, wie man für die eigene Anwendung diese Tastatur komplett deaktiviert.

Über diesen Faden war ich bei meiner Suche ebenfalls bereits gestoßen. Allerdings funktionieren die dort aufgezählten Schnittstellen IPenInputPanel bzw. ITextInputPanel offensichtlich nicht mehr. Ich kann darüber weder die Anzeige unterdrücken, noch eine angezeigte virt. Tastatur wieder ausblenden.

Auch der Eintrag in der Registry, der die Anzeige der virt. Tastatur für eine Applikation unterdrücken soll, funktioniert nicht (mehr).

Eine angezeigte virt. Tastatur kann ich zumindest über

Delphi-Quellcode:
    Handle := FindWindow(PChar('IPTip_Main_Window'), nil);
    if Handle <> 0 then
      PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
zuverlässig wieder ausblenden.

hotrs02 26. Jul 2022 12:26

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Danke für deinen Hinweis.

Zitat:

Zitat von einbeliebigername (Beitrag 1509252)
Hallo,
Die Touch-Tastatur läuft bei Microsoft unter dem Thema erleichterte Bedienung. Dazu zählt z.b. auch alles was man braucht um seine Anwendung für Menschen mit eingeschrängtem Sehvermögen zu öffnen. Und das läuft über das UIAutomation.

Ich habe mir die von dir genannten Quellen einmal genauer angeschaut und in einer Testapplikation eingesetzt. Allerdings kann ich auch damit die virt. Tastatur nicht unterdrücken.

himitsu 26. Jul 2022 13:03

AW: Automatische Anzeige der virt. Tastatur unterdrücken
 
Gab es am TEdit nicht mal ein Property, wo man einstellen konnte welche Tastatur aufgehen soll?
Dachte eher im FMX, aber auch bei DevExpress grade nichtgefunden, aber mir war so ich hätte mal sowas gesehn. :gruebel:

Also normale Tastatur, oder nur Nummerisch, oder wie Telelefon usw.

Da hätte man mal nachsehen können, was das macht und ob es da auch eine Einstellung "keine Tastatur" gäbe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.
Seite 1 von 4  1 23     Letzte »    

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