什么时候TGraphicControl.Paint叫?

时间:2009-02-23 18:25:11

标签: delphi image sdl vcl

我正在尝试编写一个自定义TGraphicControl后代,允许用户在VCL表单上嵌入SDL渲染表面。这将提供一种在表单中显示SDL动画的简单方法。

显然,使用Paint方法重绘了TGraphicControl。这种情况多久被召唤一次?只有当某些事情发生在使控件无效时,或者还有其他事情可以调用它吗?它如何与自己绘图的东西相互作用?

2 个答案:

答案 0 :(得分:6)

当窗口控件在下面重绘时,调用非窗口控件(TGraphicControl)的Paint方法。当处理窗口控件的WM_PAINT消息时会发生这种情况。

窗口控件在其整个区域或部分区域无效时重绘,或者在Z顺序中较高的另一个窗口关闭或移动时重绘,以便窗口暴露并需要重新绘制。

使TGraphicControl无效将计算窗口化父控件的相应部分,并使该部分无效。

如果你需要一个TGraphicControl来重绘自己,那么你需要在它或它的父控件上调用Invalidate。没有其他方法可以重绘。

答案 1 :(得分:1)

  

问题1:这种情况多久被调用一次?

请参阅答案Mghie:每当父窗口控件处理WM_PAINT消息时

  

问题2:是吗?   只有当事情发生时   使控件无效,或者在那里   其他称之为的东西?

请参阅答案Mghie:只有当它失效时

  

问题3:如何做到   与某些事物相互作用   它自己的画?

您必须使用override指令将自己的绘图例程放在TGraphicControl后代的Paint方法中。在Paint方法中绘图不会发送另一个WM-PAINT消息。在Paint方法中,您可以在画布上绘制而无需进入WM-PAINT消息循环。尽可能快地制作您的绘图代码,因为可能会有很多WM-PAINT消息在飞来飞去。如果您的绘图程序需要花费很多时间,那么您的应用程序将显得缓慢/无响应。