Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi IFMXVirtualKeyboardService & Windows (https://www.delphipraxis.net/182635-ifmxvirtualkeyboardservice-windows.html)

Mavarik 6. Nov 2014 10:56

IFMXVirtualKeyboardService & Windows
 
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

Mavarik 6. Nov 2014 11:43

AW: IFMXVirtualKeyboardService & Windows
 
Zitat:

Zitat von Mavarik (Beitrag 1278897)
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

Delphi-Quellcode:
  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

Mavarik 8. Nov 2014 18:38

AW: IFMXVirtualKeyboardService & Windows
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 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