gpt4 book ai didi

Delphi firemonkey tabstop 选项卡控件中的问题

转载 作者:行者123 更新时间:2023-12-01 16:23:53 24 4
gpt4 key购买 nike

我正在Windows平台的Delphi XE5 Update 2中编写Firemonkey HD程序。我有一个选项卡控件,表单上有一个 tabitem,并且 tabitem 中有一些编辑框。我相应地设置了 Taborder(0,1,2,..),当我输入 Edit1 并点击 Tab 时,Edit1 失去焦点,但 Edit2 没有获得焦点。

我尝试将编辑框放在主窗体和面板中,它们可以正常工作,当我在 edit1 中并点击选项卡时,它会转到 edit2 等,但在选项卡控件中的 tabitem 上却不会。

有谁知道这个问题的解决方法或者可能是我错过的设置?

感谢您的帮助

最佳答案

这是该问题的实际修复方法,我也在 http://vldgeorgiev.wordpress.com/2014/04/01/delphi-tab-key-and-taborder-not-working 中对此进行了描述。

它位于 FMX.TabControl.pas 单元中 TTabItem 的源代码中。
有一个名为 TTabItem.DoAddObject

的重写方法
procedure TTabItem.DoAddObject(const AObject: TFmxObject);
var
ControlTmp: TControl;
begin
if Assigned(FContent) and not AObject.Equals(FContent) and not AObject.Equals(ResourceLink) then
begin
FContent.AddObject(AObject);
...
end;

虽然应该如此

procedure TTabItem.DoAddObject(const AObject: TFmxObject);
var
ControlTmp: TControl;
begin
if Assigned(FContent) and not AObject.Equals(FContent) and not AObject.Equals(ResourceLink) then
begin
FContent.AddObject(AObject);
AddToTabList(AObject); // This line is missing in the original source
...
end;

问题在于,当表单的 KeyDown 方法处理 Tab 键时,它会调用 AdvanceTabFocus 方法,该方法会检查 FTabList 中的任何子键成分。由于 TTabItem 的原始 DoAddObject 方法缺少一行,因此它从未将子控件添加到该列表中,因此 AdvanceTabFocus 方法无法找到下一个控件。相反,它将焦点设置到窗体上的第一个控件。

要使用此修复,请将修改后的 FMX.TabControl.pas 单元复制到项目文件旁边,或者编译 DCU 并将它们放置在 Delphi 安装文件夹的 Lib... 子文件夹中。如果您没有资源,那么您就不走运了。

顺便说一句,设置 TabOrder 数字并不总是足够的。您必须右键单击并使用“Tab order...”,甚至在表单文本中手动重新排序控件(使用 Alt-F12)

关于Delphi firemonkey tabstop 选项卡控件中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782843/

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