关于Firemonkey在Delphi Seattle中无法显示的提示

3
很高兴Firemonkey在Delphi Berlin和Seattle中再次为控件添加了Hint属性。但是,实现似乎还有些缺陷。
一个奇怪的问题是,显示Hint似乎与窗体的BorderIcons属性有关。如果BorderIcons保持默认值(最大化、最小化、系统菜单),则提示会显示。但是如果我更改一些边框图标,提示就不再显示了。我没有看到任何逻辑,所以它看起来像是一个bug。我在FMX.Forms单元中跟踪了一些代码,但找不到与边框图标相关的任何关系。TriggerControlHint和其他方法中的提示似乎设置正确。
是否有人遇到过这样的问题,并且你们解决了吗?
有其他问题,例如在Windows上将XE8项目转换为Seattle后提示不起作用。 在这个问题中Firemonkey Hints don't work in Delphi Seattle, for a project converted from XE7中提到了这一点。 我通过重新创建dproj文件来解决了这个问题,这可能与默认清单/主题有关。
此外,放置在TLayout上的控件的提示不会显示,因为布局没有ShowHint属性。 对我来说听起来不太合理,但至少可以通过手动设置每个控件的ShowHint属性来克服这个问题。
该问题已在QC上报告RSP-13218
1个回答

2

在进一步跟踪FMX.Forms后,我找到了这个错误。

TCommonCustomForm.Create方法的结尾处,提示对象被设置为

if not (csDesigning in ComponentState) then
  FSharedHint := THint.CreateNewInstance(Handle);

但是当 BorderIcons 被更改时,以及在其他情况下,它会调用 TCommonCustomForm.Recreate 方法,该方法还会重新创建窗口句柄,因此提示不再与其相关联。 为了解决这个问题,我不得不在 finally 子句之前添加几行代码来重新创建提示:

if Visible and ([TFmxFormState.Showing] * FormState = []) then
  FWinService.ShowWindow(Self);
// Added lines
if not (csDesigning in ComponentState) then
begin
  FSharedHint.Free;
  FSharedHint := THint.CreateNewInstance(Handle);
end;

已经有人报告了,我看到至少有一个问题在那里发布。我写了一个评论,提供解决方案,以防有人查看。 - VGeorgiev
好的,如果你在这个Stack Overflow问题中添加一个链接到QP就太棒了。这意味着所有遇到同样问题的人都能在QP上找到它并为其投票。 - Hans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接