如何阻止FireMonkey TPaintBox擦除其背景?

时间:2017-09-28 16:52:05

标签: android ios delphi canvas firemonkey

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

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

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

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题......

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

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

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