Delphi FMX将焦点设置为特定控件,以便显示光标 [英] Delphi FMX set focus to a particular control so the cursor appears

查看:11
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆