Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Verwenden des TextInputPanels / der PenInputPanelLib_TLB (https://www.delphipraxis.net/165783-verwenden-des-textinputpanels-der-peninputpanellib_tlb.html)

Y.Elm 16. Jan 2012 11:28

Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Hallo allerseits, ich hoffe, ich bin im richtigen Forum unterwegs mit meiner Frage.
Ich habe in diesem Beitrag gelesen, wie die Steuerung der Windows-Touch-Tastatur (oder auch TextInputPanel) möglich sein soll.
Ich hab mich also frisch ans Werk gemacht, die Typenbibliothek PenInputPanelLib_TLB importiert, in einem kleinen Testprogrämmchen ein TextInputPanel erzeugt und möchte diesem mitteilen, dass es sich nicht automatisch öffnen soll, wenn man auf Edit1 tippt.

Soweit ich verstanden habe, sind dazu folgende Schritte notwendig:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  TIP: TextInputPanel;
begin
  TIP := CoTextInputPanel.Create; // TextInputPanel erzeugen
  TIP.Set_AttachedEditWindow(Edit1.Handle); // Ziel-Komponente zuweisen
  TIP.Set_InPlaceVisibleOnFocus(Integer(FALSE)); // TIP bleibt unsichtbar, wenn Ziel-Komponente fokussiert wird
end;
Allerdings sieht die Deklaration von Set_AttachedEditWindow so aus:
Delphi-Quellcode:
function Set_AttachedEditWindow(var AttachedEditWindow: _RemotableHandle): HResult; stdcall;
Was bitte ist ein _RemotableHandle und wie kann ich der Funktion das Handle meines Edit1 übergeben?
Da die ganze TLB für mich noch fremd ist und eher nach Voodoo aussieht, wäre ich sehr dankbar, wenn mir jemand helfen könnte oder allgemeine Hinweise zum Gebrauch der PenInputPanelLib_TLB geben könnte.

(Der Hintergrund des Ganzen ist übrigens: unsere Software war bisher nur für den Betrieb auf Desktop-PCs mit Touch-Monitor ausgelegt, wo höchstwahrscheinlich eine Hardware-Tastatur verfügbar ist. Es ist also in fast allen Dialogen ein programminternes TouchKeyboard vorhanden ... aber nur in fast allen. Mit dem Durchbruch der Tablet-PCs soll unsere Software auch da benutzt werden können. Nun ist es meine Aufgabe, das automatische Aufpoppen des Windows TouchKeyboards in den Dialogen mit eigenem Keyboard zu verhindern und in allen anderen zuzulassen :roll:)

ULIK 16. Jan 2012 12:04

AW: Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Nimm einfach das Fensterhandle des Edit-Felds her. Das funktioniert bei mir bisher ohne Probleme.

Y.Elm 16. Jan 2012 13:50

AW: Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Zitat:

Nimm einfach das Fensterhandle des Edit-Felds her.
Genau das versteh ich ja nicht. Dieses ominöse _RemotableHandle sieht folgendermaßen aus:
Delphi-Quellcode:
  _RemotableHandle = record
    fContext: Integer;
    u: __MIDL_IWinTypes_0009;
  end;
Diesem Record kann ich natürlich kein Handle mit der Deklaration
Delphi-Quellcode:
HWND = type LongWord;
zuweisen.
In meinem Test hab ich es mal so probiert:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  TIP: TextInputPanel;
  hnd: _RemotableHandle;
  res: HResult;
begin
  TIP := CoTextInputPanel.Create;
  hnd.fContext := Edit1.Handle;
  res := TIP.Set_AttachedEditWindow(hnd);
  Form1.Caption := inttostr(res);
  res := TIP.Set_InPlaceVisibleOnFocus(Integer(FALSE));
  Form1.Caption := Form1.Caption + ' - ' + inttostr(res);
end;
Als Ergebnis davon steht in der Caption " -2147024809 - 1", woraus ich schließe, dass TIP.Set_AttachedEditWindow(hnd); nicht funktioniert hat.
Edit: Und natürlich poppt dieses Tastatur-Icon wieder auf, was ich deaktivieren wollte.

ULIK 16. Jan 2012 14:34

AW: Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Das glaub ich ist ein Fehler des Library Imports. Du kannst es so ersetzen:

Delphi-Quellcode:
function Get_AttachedEditWindow(out AttachedEditWindow: SYSINT): HResult; stdcall;
function Set_AttachedEditWindow(AttachedEditWindow: SYSINT): HResult; stdcall;
Da gab's mal irgendwo einen Kommentar von einem der Borlandleute dazu, ich weiß aber nicht mehr wann und wo.

Y.Elm 16. Jan 2012 14:57

AW: Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Herzlichen Dankan ULIK!
Nach deiner Antwort ist mir spontan aufgefallen, dass sich die Parameter der Funktion Set_AttachedEditWindow von ITextInputPanel und IPenInputPanel unterscheiden. Man, darauf muss man erstmal kommen :wall:.

Muss man das TextInputPanel für jedes Editfeld einzeln deaktivieren oder geht das auch Formularweit?

ULIK 16. Jan 2012 16:31

AW: Verwenden des TextInputPanels / der PenInputPanelLib_TLB
 
Ich glaube nicht, daß das global geht. Du bindest ja eine Panelinstanz immer an ein Fensterhandle. Aber da mußt vieleicht nochmal schauen.

Grüße,
Ulrich


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