【问题标题】:Hints on Firemonkey not displaying in Delphi Seattle关于 Firemonkey 的提示未在西雅图德尔福显示
【发布时间】:2017-05-26 23:42:36
【问题描述】:

很高兴 Firemonkey 再次获得了控件的 Hint 属性,至少在 Delphi Berlin 和西雅图是这样。 但是,实现似乎还有一点缺陷。

一个奇怪的问题是Hint 的显示似乎与表单的BorderIcons 属性有关。如果BorderIcons 保留默认值(最大化、最小化、系统菜单),则会显示提示。但是如果我更改一些边框图标,提示就不会再显示了。我没有看到任何逻辑,所以它看起来像一个错误。我在FMX.Forms 单元中跟踪了一些代码,但找不到与边框图标的任何关系。 TriggerControlHint 和其他方法中的提示似乎设置正确。

有没有人遇到过这样的问题,你解决了吗?

还有其他问题,例如提示在 Windows 上转换为西雅图的 XE8 项目上不起​​作用。在这个问题Firemonkey Hints don't work in Delphi Seattle, for a project converted from XE7 中提到过。我通过重新创建 dproj 文件解决了这个问题,它可能与默认清单/主题有关。

同样不会显示放置在 TLayout 上的控件的提示,因为该布局没有 ShowHint 属性。对我来说听起来不太合乎逻辑,但至少可以通过手动设置每个控件的 ShowHint 属性来克服它。

问题在 QC 上报告为RSP-13218

【问题讨论】:

    标签: user-interface delphi firemonkey delphi-10.1-berlin


    【解决方案1】:

    在通过FMX.Forms 进行更多跟踪后,我发现了这个错误。

    TCommonCustomForm.Create方法的最后,提示对象被设置为

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

    但是当 BorderIcons 改变时,以及在其他情况下,它会调用 TCommonCustomForm.Recreate 方法,该方法也重新创建窗口句柄,因此提示不再链接到它。 为了修复它,我还必须通过在 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;
    

    【讨论】:

    • 已经报道了,我看到那里至少有一个问题。我在解决方案中写了一条评论,以防有人看到它。
    • 啊,好的。如果您在此 SO 问题上添加指向 QP 的链接,那就太好了。这意味着每个有相同问题的人都会在 QP 上找到它并投票给它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多