AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi IFMXVirtualKeyboardService & Windows
Thema durchsuchen
Ansicht
Themen-Optionen

IFMXVirtualKeyboardService & Windows

Ein Thema von Mavarik · begonnen am 6. Nov 2014 · letzter Beitrag vom 8. Nov 2014
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#1

IFMXVirtualKeyboardService & Windows

  Alt 6. Nov 2014, 10:56
Hallo Zusammen!

Eigentlich sollte man doch davon ausgehen, dass der "IFMXVirtualKeyboardService" auf jeder Plattform das richtige macht.

Auf iOS & Android funktioniert es ja bekanntlich, aber auf Windows nicht.

Obwohl ein

Delphi-Quellcode:
  
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService)
    then OK := true
    else OK := false;
true ergibt. Wird leider keine Tastatur eingeblendet, wenn ein TEdit den Focus hat.
Warum nicht?

OK versuchen wir es per Hand...
Delphi-Quellcode:
procedure TForm.Edit1Enter(Sender: TObject);
var
  IKEY : IFMXVirtualKeyboardService;
begin
   if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyBoardService,IKEY) then
     IKey.ShowVirtualKeyboard(TEdit(Sender));
end;
Das funktioniert - insofern, dass die Tastatur eingeblendet wird - aber:
1. Will ich nicht in jedem onEnter/onExit so etwas rein setzen
2. dauert es ewig bis die Tastaur sichtbar ist.
3. Ist das ein "verblödetes" Form, welches als 1. mal den Focus klaut und sowieso irgendwo im Weg rum steht.

Wie geht es richtig? Habe ich etwas übersehen?

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: IFMXVirtualKeyboardService & Windows

  Alt 6. Nov 2014, 11:43
Das funktioniert - insofern, dass die Tastatur eingeblendet wird - aber:
1. Will ich nicht in jedem onEnter/onExit so etwas rein setzen
2. dauert es ewig bis die Tastaur sichtbar ist.
3. Ist das ein "verblödetes" Form, welches als 1. mal den Focus klaut und sowieso irgendwo im Weg rum steht.

Wie geht es richtig? Habe ich etwas übersehen?
OK Ich habe etwas übersehen...
ein

  VKAutoShowMode := TVKAutoShowMode.Always; Im Projektfile vor dem nach dem Init, bringt schon mal bei einem Focus das Keyboard...
bleiben leider noch die Punkt 2 & 3...

(2) ok nur beim 1. mal.
(3) klaut zwar nicht mehr den Focus, steht aber irgendwo. Leider kommt die Tastatur App hoch und nicht die Windows 8 variante...

Ich werde weiter testen..

Edit: Es wird von Firemonkey die osk.exe gestartet und nicht das Windows 8 OnScreenKeyboard. Das ist das Problem.


Mavarik

Geändert von Mavarik ( 6. Nov 2014 um 12:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: IFMXVirtualKeyboardService & Windows

  Alt 8. Nov 2014, 18:38
Ich habs erst mal. Dank der Hilfe von Sir Rufo...

Ich noch nicht optimal, aber durch eine kleine Änderung in der FMX.Platform.Win

Ausszug aus der TVirtualKeyBoardWin.Create

Delphi-Quellcode:
  if DVersion < 620 then
  begin
    if Winapi.Windows.RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Enum', 0, KEY_READ,
      HID) = ERROR_SUCCESS then
      try
        S := FindKeyValue(HID, 'ClassGUID', '{4D36E96B-E325-11CE-BFC1-08002BE10318}', 'Control',
          'ActiveService');
        FKBPresent := S <> '';
      finally
        RegCloseKey(HID);
      end;
  end
  else
  begin
    {$IFNDEF HARDCODED}
    if Winapi.Windows.RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\', 0, KEY_READ,HID) = ERROR_SUCCESS then
      try
        S := FindKeyValue(HID, 'CLSID', '{054AAE20-4BEA-4347-8A35-64A533254A9D}', 'LocalServer32',''); // Häää
        FPath := S;
        FExeName := 'TabTip.exe';
        FWndClassName := 'IPTip_Main_Window';
        FKBPresent := S <> '';
      finally
        RegCloseKey(HID);
      end;
    {$ELSE}
    FPath := 'C:\Program Files\Common Files\Microsoft Shared\Ink'; //S;
    FExeName := 'TabTip.exe';
    FWndClassName := 'IPTip_Main_Window';
    FKBPresent := true;
    {$ENDIF}
    //Windows.Devices.Input.KeyboardCapabilities.KeyboardPresent
  end;
Schön wäre es noch ohne den {$DEFINE HARDCODED}

Grüsse Mavarik
  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 21:40 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