Delphi,Firemonkey - 如何在paint之外的组件画布上绘制

时间:2017-02-12 03:53:49

标签: delphi firemonkey

我正在为Firemonkey编写我的第一个组件。它是非常动态的控制并且保持最小的刷新时间,当属性改变时,我只想修改受影响的属性而不是重新绘制整个控件。

我发现的第一个问题是,除非你在Paint循环中,否则你需要先调用Canvas.SetMatrix(AbsoluteMatrix),否则画布函数会被引用到父坐标。我不太明白这一点。

第二个发布是在OSX上使用此控件时,除非我调用继承的绘制过程(我覆盖),否则不会显示画布上的任何更改。这在Win32

中工作正常

组件基于TControl

1 个答案:

答案 0 :(得分:1)

你可能不喜欢这样,但你不应该在油漆事件之外画画。所以不要这样做。如果你打破这个规则,Windows会更宽容,但你也不应该在Windows上这样做。例如,如果您的窗口(部分)隐藏,则不需要更新,操作系统将跳过绘制事件。因此,不要试图对抗操作系统,最好使用它。通常还有更好的选择。

您可以保留内部"缓存"位图并根据需要进行更新。然后当绘制事件到来时,您可以绘制整个位图。如果可能,请在paint事件中更新此缓存位图(如果需要更改)。

如果要暂时突出显示项目,可以在顶部显示透明窗口并在该窗口上绘画。让操作系统窗口管理器为您完成繁重的工作。