关于Firemonkey的提示未在Delphi Seattle中显示

时间:2017-01-12 01:01:42

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

很高兴Firemonkey再次获得了控件的Hint属性,至少在德尔福柏林和西雅图。 但是,实施似乎有点瑕疵。

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

有没有人有过这样的问题并且你以某种方式解决了它?

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

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

问题在质量控制中报告为RSP-13218

1 个答案:

答案 0 :(得分:2)

经过FMX.Forms的更多追踪后,我发现了错误。

TCommonCustomForm.Create方法的末尾,使用

设置提示对象
if not (csDesigning in ComponentState) then
  FSharedHint := THint.CreateNewInstance(Handle);

但是当BorderIcons被更改时,以及在其他情况下,它调用TCommonCustomForm.Recreate方法,该方法也重新创建窗口句柄,因此提示不再链接到它。 要修复它,我还必须通过在finally方法中的Recreate子句之前添加几行来重新创建提示:

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;