我不知道这三种方法中哪一种最适合我。他们都为我工作。有谁知道刷新、更新和重绘之间的区别?
3 回答
根据在线文档:
刷新- 在屏幕上重新绘制控件。
调用 Refresh 方法立即重绘控件。Refresh 调用 Repaint 方法。交替使用 Refresh 和 Repaint 方法。
重绘- 强制控件在屏幕上重绘其图像。
调用 Repaint 以强制控件立即重新绘制其图像。如果 ControlStyle 属性包含 csOpaque,则控件直接绘制自身。否则,Repaint 方法调用 Invalidate 方法,然后调用 Update 方法,以便控件下方的控件的任何可见部分也将被重新绘制。
更新- 立即处理任何挂起的绘制消息。
调用 Update 以强制在进行任何可能耗时的处理之前重新绘制控件。使用更新向无法等待 Windows 绘制消息到达的用户提供即时反馈。
更新不会使控件无效,而只是强制重新绘制已经无效的任何区域。而是调用 Repaint 以使控件无效。
您的问题已经得到解答,但如果您需要良好的性能和更少的闪烁,则应改为调用 Invalidate。它允许 Windows 优化绘画过程。
无效- 完全重绘控件。
当需要重新绘制整个控件时使用 Invalidate。当控件内有多个区域需要重绘时,Invalidate 会导致整个窗口一次重绘,避免重复重绘导致的闪烁。在实际重绘控件之前多次调用 Invalidate 不会造成性能损失。
根据较旧的(CBuilder 6)VCL 参考:
Invalidate “Invalidate 通知控件其整个表面需要重绘。调用 Invalidate 可以防止由一系列部分重绘引起的闪烁。在控件实际重绘之前多次调用 Invalidate 不会造成性能损失”。
在控件更新之前不会发生实际的重绘。要强制立即重新绘制,请改为调用 Repaint。
重绘“TWinControl:: Repaint调用 Invalidate 方法,然后调用 Update 方法来重绘控件”(稍微解释一下)。
(遗憾的是,较旧的参考文献比我拥有的新参考文献更好、更完整(CBuilder 2007)。