gpt4 book ai didi

Delphi FMX 将焦点设置到特定控件,以便出现光标

转载 作者:行者123 更新时间:2023-12-02 21:59:09 25 4
gpt4 key购买 nike

我创建了一个测试新的 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 上运行时,如果我单击 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;
<小时/>

为了使其更通用,请使用专用过程:

procedure DelayedSetFocus(control : TControl);
begin
TThread.CreateAnonymousThread(
procedure
begin
TThread.Synchronize( nil,
procedure
begin
control.SetFocus;
end
);
end
).Start;
end;

关于Delphi FMX 将焦点设置到特定控件,以便出现光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com