2017-09-28 21 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。

相關問題