Delphi 西雅图未显示有关 Firemonkey 的提示
Hints on Firemonkey not displaying in Delphi Seattle
很高兴 Firemonkey 再次获得控件提示 属性,至少在 Delphi 柏林和西雅图是这样。
不过,实现起来好像还是有点问题。
一个奇怪的问题是 Hint
的显示似乎与表单的 BorderIcons
属性 有关。如果 BorderIcons
保留默认值(Maximize、Minimize、SystemMenu),则显示提示。但是如果我改变一些边框图标,提示就不会再显示了。我没有看到任何逻辑,所以它看起来像一个错误。我在 FMX.Forms
单元中追踪了一些代码,但找不到与边框图标的任何关系。 TriggerControlHint
和其他方法中的提示似乎设置正确。
有没有人遇到过这样的问题,你们有没有解决?
还有其他问题,例如提示在 Windows 上转换为西雅图的 XE8 项目上不起作用。在这个问题Firemonkey Hints don't work in Delphi Seattle, for a project converted from XE7中提到了它。我通过重新创建 dproj 文件修复了这个问题,它可能与默认 manifests/themes.
有关
放置在 TLayout 上的控件的提示也不会显示,因为布局没有 ShowHint 属性。对我来说听起来不太合逻辑,但至少可以通过手动设置每个控件的 ShowHint 属性 来克服它。
问题在 QC 上报告为 RSP-13218
通过 FMX.Forms
进行更多追踪后,我发现了错误。
在 TCommonCustomForm.Create
方法的末尾,提示对象设置为
if not (csDesigning in ComponentState) then
FSharedHint := THint.CreateNewInstance(Handle);
但是当 BorderIcons 发生变化时,以及在其他情况下,它会调用 TCommonCustomForm.Recreate 方法,该方法也会重新创建 window 句柄,因此提示不再链接到它。
为了修复它,我还必须通过在 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;
很高兴 Firemonkey 再次获得控件提示 属性,至少在 Delphi 柏林和西雅图是这样。 不过,实现起来好像还是有点问题。
一个奇怪的问题是 Hint
的显示似乎与表单的 BorderIcons
属性 有关。如果 BorderIcons
保留默认值(Maximize、Minimize、SystemMenu),则显示提示。但是如果我改变一些边框图标,提示就不会再显示了。我没有看到任何逻辑,所以它看起来像一个错误。我在 FMX.Forms
单元中追踪了一些代码,但找不到与边框图标的任何关系。 TriggerControlHint
和其他方法中的提示似乎设置正确。
有没有人遇到过这样的问题,你们有没有解决?
还有其他问题,例如提示在 Windows 上转换为西雅图的 XE8 项目上不起作用。在这个问题Firemonkey Hints don't work in Delphi Seattle, for a project converted from XE7中提到了它。我通过重新创建 dproj 文件修复了这个问题,它可能与默认 manifests/themes.
有关放置在 TLayout 上的控件的提示也不会显示,因为布局没有 ShowHint 属性。对我来说听起来不太合逻辑,但至少可以通过手动设置每个控件的 ShowHint 属性 来克服它。
问题在 QC 上报告为 RSP-13218
通过 FMX.Forms
进行更多追踪后,我发现了错误。
在 TCommonCustomForm.Create
方法的末尾,提示对象设置为
if not (csDesigning in ComponentState) then
FSharedHint := THint.CreateNewInstance(Handle);
但是当 BorderIcons 发生变化时,以及在其他情况下,它会调用 TCommonCustomForm.Recreate 方法,该方法也会重新创建 window 句柄,因此提示不再链接到它。
为了修复它,我还必须通过在 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;