Falls es interessiert, ich habe einen Workaround gefunden.
Habe diesen Thread entdeckt:
http://www.delphipraxis.net/186005-v...ktivieren.html
Ich habe nun die
unit VirtualKeyboardService erstellt und in meine Testapp eingebunden.
Die Methoden ShowVirtualKeyboard und HideVirtualKeyboard habe ich allerdings public declariert, damit ich sie auch aufrufen kann.
ShowVirtualKeyboard habe ich leicht modifiziert, damit ich notfalls doch das Keyboard anzeigen kann. Zu diesem Zweeck muss ich vor dem Aufruf von ShowVirtualKeyboard das Tag des Editcontrols auf <> 0 setzen.
Code:
function TVirtualKeyboardService.ShowVirtualKeyboard( const AControl: TFmxObject ): Boolean;
begin
if IsOverriddenObject( AControl ) and (acontrol.Tag = 0) then
begin
HideVirtualKeyboard;
Result := False;
end
else
Result := FOriginalService.ShowVirtualKeyboard( AControl );
end;
Meinem TEdit habe ich einen Button verpasst in dessen OnClick ich Tag mit 0 oder 1 versorge. Dadurch kann ich mit dem Button das Keyboard sichtbar oder unsichtbar machen.
Code:
procedure TForm1.EditButton1Click(Sender: TObject);
begin
Edit1.Tag := abs (Edit1.Tag - 1);
if Edit1.Tag = 0 then
TVirtualKeyboardService.Current.HideVirtualKeyboard
else
TVirtualKeyboardService.Current.ShowVirtualKeyboard(Edit1);
end;
Im OnEnter setze ich Tag immer auf 0;
Das funktioniert erst mal ganz vernünftig. Einziges Problem ist noch, dass der erste Scan nur funktioniert, wenn einmal ein Keyboard angezeigt wurde.
Habe deshalb mal Edit1.Tag im Formshow auf -1 gesetzt und im OnEnter von Edit1 im Falle, dass Tag < 0 ist, das Keyboard einmal angezeigt und gleich wieder geschlossen.
Code:
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Tag := -1;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
if Edit1.Tag < 0 then
begin
TVirtualKeyboardService.Current.ShowVirtualKeyboard(Edit1);
TVirtualKeyboardService.Current.HideVirtualKeyboard;
end;
Edit1.Tag := 0;
end;
Das funktioniert so, ist aber nicht befriedigend, da es nicht sehr schön ist, wenn das Keyboard kurz angezeigt wird.
Da ich in der richtigen App aber ohnehin zu Beginn eine Login Maske habe und man da sowieso sinnvollerweise ein Keyboard benötigt (und es da auch nicht stört), kann ich mir das dann da eventuell ersparen.
Irgendwie ziemlich kompliziert nur für so eine einfache Funktion. Aber was solls, Hauptsache es funktioniert.
Wäre aber trotzdem für Anregungen, Verbesserungsvorschläge und Hinweise auf eventuelle Fallstricke bzw. Denkfehler dankbar.