【问题标题】:How do I stop FireMonkey TPaintBox from erasing its background?如何阻止 FireMonkey TPaintBox 擦除其背景?
【发布时间】:2017-09-28 16:52:05
【问题描述】:

TCanvasGPU 用于 FireMonkey 上的移动平台。不幸的是,正如有人发现的那样:FMX on iOS: how to perform partial invalidation?,此画布不支持 cliprects,并且 Canvas.InvalidateRect(TRectF) 总是使整个画布无效。

这不会那么糟糕,除了画布背景总是在 OnPaint 事件之前被擦除。这意味着任何仅更新 OnPaint 中的矩形的尝试都注定要失败,因为首先清除整个区域。所以即使是最小的更新也需要绘制整个画布。

有谁知道是否可以阻止在 FireMonkey 中擦除控件(特别是 TPaintBox)背景?过去在 VCL 中可以通过设置 ControlStyle := ControlStyle + [csOpaque] 来实现。

我在 FMX.Forms 中找到了 TCustomForm.PaintBackground,制作了一个本地副本并在 TCustomForm.PaintRects 中注释掉了对此的调用,认为它会阻止控件被擦除,但 TPaintBox 画布仍然以某种方式被清除。

【问题讨论】:

    标签: android ios delphi canvas firemonkey


    【解决方案1】:

    回答我自己的问题...

    默认情况下,TForm 的样式是包含一个 TRectangle 作为第一个组件,并且在任何绘制事件中都会用浅灰色填充。

    在注释掉 FMX.Objects.TRectangle.Paint 中的这个填充时,果然,在 Windows 上,TPaintBox 画布在任何 Invalidate 上都保留其图像。

    不幸的是,在 Android 上,屏幕现在只是清除为黑色而不是浅灰色。因此,似乎 TCanvasGPU 图像在移动设备上的绘制事件之间没有维护,这可能是不支持 cliprects 的原因。

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 2016-08-19
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2020-09-02
      • 2011-07-09
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多