Delphi FMX将焦点设置为特定控件,以便显示光标 [英] Delphi FMX set focus to a particular control so the cursor appears
本文介绍了Delphi FMX将焦点设置为特定控件,以便显示光标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建了一个测试新的FMX项目。向其中添加了一个TabControl。使用上下文菜单添加了3个选项卡。在第三个选项卡中,添加了一个TEdit。向选项卡控件添加了OnChangeEvent处理程序。编码如下:
procedure TForm1.TabControl1Change(Sender: TObject);
begin
if TabControl1.ActiveTab = TabItem3 then
begin
self.ActiveControl := Edit1;
self.Focused := Edit1;
Edit1.SetFocus;
end;
end;
如您所见,我根据以前的VCL经验尝试了各种组合。输入/光标焦点不会通过代码更改为Edit1。当然,在Win32上运行时,如果我点击编辑1,焦点矩形(我使用的是一种样式)现在会和光标一样显示出来。(不出所料)在Android上。只有当我自己转移焦点时,VK才会出现。
有没有办法以编程方式完成此操作,以便用户可以直接开始键入?(无需将焦点转移到TEDIT本身)。
推荐答案
火猴框架禁止在某些事件中更改焦点。
为了更改焦点,请向表单发送延迟的消息。
这可以通过匿名线程完成:
procedure TForm1.TabControl1Change(Sender: TObject);
begin
if TabControl1.ActiveTab = TabItem3 then
begin
TThread.CreateAnonymousThread(
procedure
begin
TThread.Synchronize( nil,
procedure
begin
Edit1.SetFocus;
end
);
end
).Start;
end;
end;
要使其更通用,请使用专用程序:
procedure DelayedSetFocus(control : TControl);
begin
TThread.CreateAnonymousThread(
procedure
begin
TThread.Synchronize( nil,
procedure
begin
control.SetFocus;
end
);
end
).Start;
end;
这篇关于Delphi FMX将焦点设置为特定控件,以便显示光标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文