AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Automatische Anzeige der virt. Tastatur unterdrücken
Thema durchsuchen
Ansicht
Themen-Optionen

Automatische Anzeige der virt. Tastatur unterdrücken

Ein Thema von hotrs02 · begonnen am 25. Jul 2022 · letzter Beitrag vom 16. Aug 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#1

Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 14:57
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ß

Geändert von hotrs02 (25. Jul 2022 um 16:04 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 16:13
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.
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#3

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 16:25
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?)

Geändert von hotrs02 (25. Jul 2022 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 16:49
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.
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#5

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 16:56
Vielleicht ist es ein Versuch wert.

Vielen dank schonmal.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 18:21
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.
$2B or not $2B
  Mit Zitat antworten Zitat
einbeliebigername

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 20:37
Hallo,

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 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;
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#8

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13:20
Zunächst danke für die Hinweise.

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.
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
40 Beiträge
 
#9

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13:26
Danke für deinen Hinweis.

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 14:03
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.

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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 14:57 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