我创建了一个测试新的FMX项目.添加了TabControl.使用上下文菜单添加3个选项卡.在第3个标签页中添加了一个TEdit.为tabcontrol添加了OnChangeEvent处理程序.编码如下:
procedure TForm1.TabControl1Change(Sender: TObject);
begin
if TabControl1.ActiveTab = TabItem3 then
begin
self.ActiveControl := Edit1;
self.Focused := Edit1;
Edit1.SetFocus;
end;
end;
Run Code Online (Sandbox Code Playgroud)
如您所见,我根据之前的VCL体验尝试了各种组合.输入/光标焦点不会通过代码更改为Edit1.当然,在Win32的运行时,如果我点击edit1,焦点矩形(我正在使用一种样式)现在就像光标一样显示.(正如预期的那样)在Android上.当我自己转移焦点时,VK才出现.
有没有办法以编程方式执行此操作,以便用户可以开始键入?(无需将焦点转移到TEdit本身).
firemonkey框架禁止在某些事件中改变焦点.
要更改焦点,请向表单发送延迟消息.
这可以通过匿名线程完成:
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;
Run Code Online (Sandbox Code Playgroud)
为了使其更通用,请使用专用程序:
procedure DelayedSetFocus(control : TControl);
begin
TThread.CreateAnonymousThread(
procedure
begin
TThread.Synchronize( nil,
procedure
begin
control.SetFocus;
end
);
end
).Start;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |