【问题标题】:Do FireMonkey controls have an equivalent to the VCL Invalidate() method?FireMonkey 控件是否与 VCL Invalidate() 方法等效?
【发布时间】:2011-12-07 03:17:58
【问题描述】:

我正在创建一些自定义 FireMonkey GUI 控件。组件需要更新以响应用户交互。 VCL 控件可以调用 Invalidate() 将其放入队列中进行重绘。 FireMonkey 有等效的方法吗?

FireMonkey 控件具有 Repaint() 方法,但 AFAICT 会强制控件立即重新绘制。在某些情况下,队列类型系统会更合适。

【问题讨论】:

  • 我还没用过XE2,但我想肯定有类似“scene|object.refresh|redraw”的东西
  • TControl.Realign 更适合,因为大多数时候在 FMX 控件中没有直接绘图,因为它们是由原始的。如果调用 Realign,将重绘图元

标签: delphi firemonkey


【解决方案1】:
Control.InvalidateRect(RectF(0,0,width,height));

【讨论】:

  • 据我所知,这是我问题的正确答案。 InvalidateRect() 方法不能像我希望的那样工作,但我猜这是由于 VCL 和 FMX 之间的差异。感谢 Relativ。
【解决方案2】:

FireMonkey 的 TControl.Repaint 最终会调用 TPlatformWin.ReleaseWindow。如果 Form.Transparency 为 false,则此方法调用 Windows InvalidateRect 函数,就像 VCL 的 TControl.Invalidate 一样。

所以 Repaint 实际上和 VCL 的 Invalidate 做的事情是一样的,除非 Form.Transparency=true。

【讨论】:

  • 感谢吉尔的解释
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 2017-11-09
  • 2017-10-23
  • 2018-12-03
  • 2014-11-03
  • 1970-01-01
  • 2012-03-17
  • 2019-01-11
相关资源
最近更新 更多