很高兴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
答案 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;