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
einbeliebigername

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 25. Jul 2022, 19: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
42 Beiträge
 
#2

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 12: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.818 Beiträge
 
Delphi 12 Athens
 
#3

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
42 Beiträge
 
#4

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13:12
Embarcadero hat in einer älteren Delphi Version an TWinControl die protected Eigenschaft

Delphi-Quellcode:
  TTipMode = (tipClose, tipOpen, tipDontCare);
  property TipMode: TTipMode read FTipMode write FTipMode default tipDontCare;
eingeführt. Standardmäßig steht diese auf tipDontCare, TEdit und TMemo z.B. setzen Sie auf tipOpen. Die Eigenschaft wird nicht veröffentlicht und ist nicht dokumentiert. Aus den Quellen lässt sich aber entnehmen, dass versucht wird, bei Erhalt des Fokus mittels ITextInputPanel Schnittstelle die virt. Tastatur einzublenden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13:21
DevExpress sagt "seit XE3"
Zitat:
Delphi-Quellcode:
  {$IFDEF DELPHIXE3}
    property TipMode;
  {$ENDIF}
Ahhhhhh, an der Form war es, wo Delphi es auf published stellt und man es da im OI sieht.
Und bei TCustomEdit's auf tipOpen gesetzt.


Hab mal kurz reingesehn, was sie da machen:
Zitat:
Delphi-Quellcode:
procedure TWinControl.UpdateTIPStatus;
begin
  if Assigned(FTIPIntf) then
  begin
    if TipMode = tipOpen then SetTextInputPanelStatus(Self, True)
    else if TipMode = tipClose then SetTextInputPanelStatus(Self, False);
  end;
end;

procedure SetTextInputPanelStatus(Control: TWinControl; OpenTIP: Boolean);
  procedure InvokeTabTip;
  const
    DefaultTabTipPath = 'C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe';
    DefaultOnScreenKeyboardPath = 'C:\Windows\System32\OSK.exe';
  var
    TabTipPath: string;
  begin
    TabTipPath := DefaultTabTipPath;
    ShellExecute(0, 'open', PChar(TabTipPath), nil, nil, SW_SHOWNOACTIVATE);
  end;

  procedure OPenTip2;
  begin
    (Control.FTIPIntf as ITextInputPanel).SetInPlaceVisibility(1); // True
  end;

  procedure CloseTip;
  begin
    (Control.FTIPIntf as ITextInputPanel).SetInPlaceVisibility(0); // False
  end;

begin
  if Assigned(Control.FTIPIntf) then
  begin
    if OpenTIP then OpenTip2 // InvokeTabTip
    else CloseTip;
  end;
end;

// das Kompilieren der Vcl.Controls.pas muß aber viele "wurde deklariert, aber wird nicht verwendet"-Warnungen werfen
Ursprünglich hatten sie damit scheinbar "selber" die Tastatur angezeigt.
Der alte Code zu TabTip.exe / OSK.exe haben sie noch drin,
aber jetzt nutzen sie auch ITextInputPanel.SetInPlaceVisibility .

[add]
Das Ganze scheint aber nur bei TApplication.IsMetropolisUI aktiv zu sein, aber ich kann nirgendwo sehen, wo IsMetropolisUI/UseMetropolisUI aktiviert wird. (klingt nach Windows8-Zeugs)

Zitat:
Delphi-Quellcode:
procedure TWinControl.CreateWnd;
...
  if (Touch.GestureEngine <> nil) and (csGestures in ControlStyle) then
    Touch.GestureEngine.Active := True;
  if Application.IsMetropolisUI and (WindowHandle <> 0) and
    not (csDesigning in ComponentState) then
  begin
    FTIPIntf := nil;
    if Succeeded(CoCreateInstance(CLASS_TextInputPanel, nil,
        CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, FTIPIntf)) then
    begin
      if Supports(FTIPIntf, ITextInputPanel) then
        (FTIPIntf as ITextInputPanel).Set_AttachedEditWindow(WindowHandle);
    end;
  end;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Jul 2022 um 14:03 Uhr)
  Mit Zitat antworten Zitat
hotrs02

Registriert seit: 7. Apr 2022
42 Beiträge
 
#6

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 13:52
Über die Eigenschaft TipMode war ich letztendlich auf die ITextInputPanel Schnittstelle aufmerksam geworden. Aber wie bereits oben geschrieben, funktioniert die Schnittstelle aktuell nicht mehr wie gewünscht.
  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 26. Jul 2022, 14:17
Hallo,

jetzt fällt es mir wieder ein. Als ich das brauchte war es bei mir aber andersrum. Die Tastatur ging bei einem Standard-Edit (bei XE8) nicht automatisch auf. Die Lösungen mit Nachrichten an die Tastaturapp schicken oder die Exe aufrufen fielen wegen undokumentiert aus. In irgendeinem Forum stieß ich auf das UIAtomation mit eine Beispielimplementierung für ein Edit. Damit ging bei mir dann die Tastatur automatisch auf.

Embarcadero hat in einer älteren Delphi Version an TWinControl die protected Eigenschaft

Delphi-Quellcode:
  TTipMode = (tipClose, tipOpen, tipDontCare);
  property TipMode: TTipMode read FTipMode write FTipMode default tipDontCare;
eingeführt. Standardmäßig steht diese auf tipDontCare, TEdit und TMemo z.B. setzen Sie auf tipOpen. Die Eigenschaft wird nicht veröffentlicht und ist nicht dokumentiert. Aus den Quellen lässt sich aber entnehmen, dass versucht wird, bei Erhalt des Fokus mittels ITextInputPanel Schnittstelle die virt. Tastatur einzublenden.
Da das bei mir im XE8 nicht funktioniert hat, kann es sein, dass das bei dir im Konflickt mit meiner Lösung steht. Versuche mal dies zu deaktivieren, so dass die Tastatur garnichtmehr automatisch aufgeht. Dann sollte sich die Tastatur wieder über das UIAtomation triggern lassen. Und dort lässt sich ja steuern ob die Tastatur aufgeht oder nicht.

Nach meiner Einschätzung ist die zukunftssichere und vom Microsoft verfolgte Variante das UIAtomation. Mir fehlt aber aktuell die Zeit mich damit zubeschäftigen. Sobalt ich etwas Luft habe (habe bald Urlaub), versuche ich da mal wieder weiterzumachen.
Mit freundlichen Grüßen, einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 14:21
Aktuell (Delphi 11) scheint dieses Property garnichts zu machen,
denn siehe if Application.IsMetropolisUI and in meinem Post #12.

IsMetropolisUI scheint immer False zu sein. (nichts gefunden, was es aktiviert)
Aber man könnte mal versuchen beim Programmstart (also in der DPR, vor Erstellen der Form) das Application.UseMetropolisUI; aufzurufen und es so zu aktivieren.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Jul 2022 um 14:23 Uhr)
  Mit Zitat antworten Zitat
hotrs02

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

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 14:30
Da das bei mir im XE8 nicht funktioniert hat, kann es sein, dass das bei dir im Konflickt mit meiner Lösung steht. Versuche mal dies zu deaktivieren, so dass die Tastatur garnichtmehr automatisch aufgeht.
Wie himitsu richtig bemerkt, wird die Eigenschaft TipMode in aktuellen Delphi Versionen standardmäßig nicht ausgewertet, weswegen es nicht zu einer Beeinflussung kommen sollte. Ich hatte bei meinen Tests aber auch noch aus vorherigen Versuchen Code stehen, der TipMode auf tipDontCare setzt.


Dann sollte sich die Tastatur wieder über das UIAtomation triggern lassen. Und dort lässt sich ja steuern ob die Tastatur aufgeht oder nicht.
Hast du ggf. noch einen Tipp, welche Schnittstelle du genau dafür verwendet hast? Mittels IValueProvider.IsReadOnly habe ich es zumindest nicht geschafft, die virt. Tastatur zu unterdrücken. Allerdings möchte ich nicht ausschließen, dass mir dabei ein Fehler unterlaufen ist. Das UI Automation Framework ist doch recht komplex.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.114 Beiträge
 
Delphi 12 Athens
 
#10

AW: Automatische Anzeige der virt. Tastatur unterdrücken

  Alt 26. Jul 2022, 18:28
Kann das nicht Auswerten/Funktionieren dieses Properties Mal jemand der sich damit auskennt im QP als Bug melden?
  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 18:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz