Refresh,Update和Repaint有什么区别?

时间:2009-08-09 09:20:06

标签: delphi vcl

我不知道这三种方法中哪一种最适合我。他们都为我工作。有谁知道刷新,更新和重绘之间的区别?

3 个答案:

答案 0 :(得分:39)

根据在线文档。

Refresh - 重新绘制屏幕上的控件。

  

调用Refresh方法重新绘制   立即控制。刷新呼叫   重绘方法。使用刷新和   重复绘制方法。

Repaint - 强制控件在屏幕上重绘其图像。

  

调用重绘以强制控制   立即重绘其图像。如果   ControlStyle属性包括   csOpaque,控件自己画   直。否则,重绘   方法调用Invalidate方法和   然后Update方法使任何   下方控件的可见部分   控制也将重新粉刷。

Update - 立即处理任何待处理的绘制消息。

  

调用更新以强制控制   可能之前重新粉刷了   耗时,处理需要   地点。使用更新立即提供   反馈给不能等待的用户   用于Windows绘制消息   到达。

     

更新不会使   控制,但只是强制重绘   任何已经过的地区   无效。请重新调用重绘   也使控件无效。

答案 1 :(得分:33)

您的问题已经得到解答,但如果您需要良好的性能和较少的闪烁,则应调用Invalidate。它允许Windows优化绘画过程。

Invalidate - 完全重新控制。

  

在整个控件中使用Invalidate   需要重新粉刷。当超过   控制需求中的一个区域   重新绘制,无效将导致   整个窗口要重新粉刷   单通,避免引起闪烁   通过多余的重绘。没有   呼叫的性能损失   在之前多次无效   控制实际上是重新粉刷的。

答案 2 :(得分:3)

根据较旧的(CBuilder 6)VCL参考:

无效“无效通知控件其整个表面需要重新绘制。调用Invalidate可以防止由一系列部分重绘造成的闪烁。在此之前多次调用Invalidate没有性能损失。控制实际上是重新绘制的。“

在更新控件之前,不会发生实际重绘。要强制立即重新绘制,请改为调用Repaint。

重绘“TWinControl :: Repaint调用Invalidate方法,然后使用Update方法重新绘制控件”(轻微释义)。

(可悲的是,较旧的参考文献比我的新参考文献更好,更完整(CBuilder 2007)。