为什么 canvas 操作与包含对象无关?

Why are canvas operations not relative to containing object?

在 Windows Firemonkey 应用程序中,当我在表单中间为矩形发出以下命令时:

rect.Canvas.BeginScene;
rect.Canvas.Clear(TAlphaColorRec.White);
rect.Canvas.EndScene

整个表格被涂成白色。

在 XE2 中不是这样。在Delphi10.

中是这样的

我忽略的新范例是什么?

原始(例如TPaintBox和所有TShape后代)控件的canvas,是canvas的表格。控件直接在此 canvas 上绘制。因此,调用 Control.Canvas.Clear() 会清除整个表单。你应该使用 TRectangleFill 属性 而不是调用 Clear,像这样:

Rectangle1.Fill.Color := TAlphaColorRec.White;

我无法评论它在 Delphi XE2 中的表现,但从那时起 FMX 库发生了很多变化。也许这就是其中之一。

另请参阅FireMonkey Component Rendering