![]() |
aktuellen Focus eines TEdit verlieren (Android / iOS)
Moin, der letzte Beitrag zu diesem Thema war aus 2018:
![]() Seit 10.x scheint sich am Verhalten unter Android wieder etwas verändert zu haben. Habe verschiedene Möglichkeiten ausprobiert, u.a. diesen Code:
Code:
... klappt aber nicht.
procedure TfMain.TabControl1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean); begin if Assigned(Focused) then begin if Focused.GetObject is TEdit then Handled:=true; if Handled then SetFocused(nil); end; end; Hat jemand eine Idee? |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Hallo,
vielleicht hilft dir diese Funktion weiter TControl.ResetFocus |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
... leider nein, hatte ich auch schon probiert.
Code:
ActiveControl.ResetFocus;
|
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Also ich nutze Gestures immer nur mit den entsprechenden Begin/End Flags, TInteractiveGestureFlag.gfBegin in EventInfo.Flags, um irgendwelche wilden Events zu vermeiden.
![]() ![]() |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Oder das hier?
Delphi-Quellcode:
Control.Enabled := False;
Control.Enabled := True; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
In der VCL kann man auch einfach
Delphi-Quellcode:
machen,
{Self.}SetFocus;
also die Form fokussieren, womit der Fokus vom Edit weg geht. (k.A. ob es auch im FMX so geht) Würde man dort den Fokus auf 0/nil setzen, dann würde die ganze Anwendung den Fokus verlieren und sie verschwindet im Hintergrund (nächste Anwendung bekommt den Fokus und kommt hoch)
Delphi-Quellcode:
Winapi.Windows.SetFocus(0);
|
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Code:
geht leider auch nicht, führt zu einer Zugriffsverletzung.
Delphi-Quellcode:
Control.Enabled := False; Control.Enabled := True; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Zitat:
|
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Ich würde einfach den Fokus auf ein anderes Element setzen.
Dann ist es vom Edit weg. VG ZYL |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Zitat:
|
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
... hiermit hat es dann endlich geklappt:
![]()
Code:
:-D
begin
TThread.CreateAnonymousThread( procedure begin TThread.Synchronize( nil, procedure begin Edit1.SetFocus; end ); end ).Start; end; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
:?:
Code:
begin
TThread.ForceQueue(nil, procedure begin Edit1.SetFocus; end); end; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Code:
worin liegt der Vorteil?
begin
TThread.ForceQueue(nil, procedure begin Edit1.SetFocus; end); end; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
* es ist kürzer
* es ist übersichtlicher * es geht direkt "verzögert" ins Synchronize, ohne erst einen Thread zu erstellen * ... ForceQueue ist der Bugfix für Queue, was aber im Hauptthread aufgerufen nicht in die Queue schiebt, sondern direkt ausführt, auch wenn es (nicht) so heißt. |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Code:
... geht!
begin
TThread.ForceQueue(nil, procedure begin Edit1.SetFocus; end); end; Danke Himitsu! :-D Es geht sogar ResetFocus:
Code:
begin
TThread.ForceQueue(nil, procedure begin ActiveControl.ResetFocus; end); end; |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Zitat:
|
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Ja Neee, nicht ganz.
Das ist IMHO ein "Bug" beim ![]() Da steht im Code sowas wie
Delphi-Quellcode:
,
IF istMainThread THEN machJetzt else machSpäter;
aber anstatt diesen Schwachsinn zu entfernen und den Fehler ordentlich zu beheben, wurde eine neue Funktion ![]() Also prinzipiell genauso ein Scheißdreck, wie das .DisposeOf, als Bugfix, weil .Free in den mobilen Platformen "garnichts" macht. |
AW: aktuellen Focus eines TEdit verlieren (Android / iOS)
Ach dann hab ich dich missverstanden. Dann ergibt der Name ja doch Sinn.
Du bezogst dich mit "ForceQueue ist der Bugfix für Queue, was aber im Hauptthread aufgerufen nicht in die Queue schiebt, sondern direkt ausführt, auch wenn es (nicht) so heißt." auf Queue und nicht auf ForceQueue. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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