2017-09-28 22 views
0

TCanvasGPU用于FireMonkey上的移动平台。不幸的是,当有人发现:FMX on iOS: how to perform partial invalidation?,这个画布不支持cliprects,而Canvas.InvalidateRect(TRectF)总是使整个画布无效。如何阻止FireMonkey TPaintBox擦除其背景?

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

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

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

回答

0

回答我的问题...

TForm的默认的样式,以包括TRectangle作为第一成分,这是充满了在任何油漆事件浅灰色。

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

不幸的是在Android上,屏幕现在只是清除黑色而不是浅灰色。所以看起来TCanvasGPU图像并不是维护在移动设备上的绘画事件之间,这可能是为什么不支持cliprects。

相关问题