What's the difference between Refresh, Update and Repaint?

DelphiVcl

Delphi Problem Overview


I don't know which of those three methods suits me most. They all work for me. Does anyone know the difference between Refresh, Update and Repaint?

Delphi Solutions


Solution 1 - Delphi

According to the online documentation:

Refresh - Repaints the control on the screen. > Call Refresh method to repaint the > control immediately. Refresh calls the > Repaint method. Use the Refresh and > Repaint methods interchangeably.

Repaint - Forces the control to repaint its image on the screen. > Call Repaint to force the control to > repaint its image immediately. If the > ControlStyle property includes > csOpaque, the control paints itself > directly. Otherwise, the Repaint > method calls the Invalidate method and > then the Update method so that any > visible portions of controls beneath > the control will be repainted as well.

Update - Processes any pending paint messages immediately.

> Call Update to force the control to be > repainted before any more, possibly > time-consuming, processing takes > place. Use Update to provide immediate > feedback to the user that cannot wait > for the Windows paint message to > arrive. > > Update does not invalidate the > control, but simply forces a repaint > of any regions that have already been > invalidated. Call Repaint instead to > invalidate the control as well.

Solution 2 - Delphi

Your question is already answered, but if you need good performance and less flicker you should call Invalidate instead. It allows Windows to optimize the painting process.

Invalidate - Completely repaint control.

> Use Invalidate when the entire control > needs to be repainted. When more than > one region within the control needs > repainting, Invalidate will cause the > entire window to be repainted in a > single pass, avoiding flicker caused > by redundant repaints. There is no > performance penalty for calling > Invalidate multiple times before the > control is actually repainted.

Solution 3 - Delphi

Per an older (CBuilder 6) VCL reference:

Invalidate "Invalidate informs a control that its entire surface needs to be repainted. Calling Invalidate can prevent flicker caused by a series of partial repaints. There is no performance penalty for calling Invalidate multiple times before the control is actually repainted".

The actual repaint does not occur until the control is updated. To force an immediate repaint, call Repaint instead.

Repaint "TWinControl::Repaint calls the Invalidate method and then the Update method to repaint the control" (slight paraphrase).

(Sadly, the older reference is better and more complete than the newer reference I have (CBuilder 2007).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIvan ProdanovView Question on Stackoverflow
Solution 1 - DelphistukellyView Answer on Stackoverflow
Solution 2 - DelphiLars TruijensView Answer on Stackoverflow
Solution 3 - Delphijeff slesingerView Answer on Stackoverflow