Firemonkey - 更新可视化组件

5
我们自从Firemonkey 1版本开始使用它,并且现在仍然发现更新当前屏幕上可见的组件存在困难。在Firemonkey中有许多“方法”可以请求重新绘制,可能太多了:
  • 应用风格(ApplyStyle事件)-主要在可见时
  • 请求“.repaint” -某些组件有此功能
  • 请求“.realign” -有时有效,FMX的当前版本似乎会删除/隐藏它
  • 请求“.invalidate” -某些组件,主要是表单,具有此功能
  • 请求“.invalidateRect” -大多数组件都具有此功能
  • 手动调用ApplyStyle事件-不能保证有效,并且在设计上不正确...

鉴于该平台缺乏文档,是否有一种“明确定义”的方法可以在组件已经显示的情况下更改其外观(样式的内部值)?例如已经存在并且在屏幕上可见的listboxItem、TGrid单元格等等。期待您的想法...


谢谢Peter - FMX是Delphi和C++的结合 :-) - Etamar Laron
1个回答

3
我认为在Firemonkey中刷新组件的视觉效果没有一个统一的“正确方法”。
然而,根据个人经验推荐使用`.repaint`路线——此方法位于`TControl`层级,因此它优先于基本元素和样式控件(通常由基本元素组成),适用于所有可视化控件。它也不需要参数,因此是一个很好的全面解决方案。
我注意到Firemonkey一直存在着无法正确地自动重新绘制控件的问题。通常我会留下前一个控件/基本元素的“残影”,必须手动调用`.repaint`来更新它。这在FM2和FM3中变得越来越明显(可能是由于针对移动平台进行的优化),因此对我而言,手动`.repaint`已成为标准做法,特别是涉及到`TGlow`等效果以及移动或旋转控件/基本元素时。

.repaint不在范围内,例如TForm(fmx); - Juan C.Cilleruelo

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