何时使用TPanel FullRepaint?

Jen*_*off 6 delphi resize tpanel

我注意到,resize flicker获得当我设置好很多TPanel.FullRepaintFalse.由于该属性存在且True默认情况下,因此必须有一些原因.

如何决定是否应该设置?

帮助只是声明:

FullRepaint控制面板调整大小时的响应方式.当FullRepaint为true时,整个面板(包括斜面边框)会在尺寸更改时重新绘制.当FullRepaint为false时,只有斜面边框内的区域重新绘制.

http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TPanel.FullRepaint

该文本说它做了什么,但不是为什么......

bum*_*mmi 4

可以显示缺失的 Fullrepaint 的效果,您必须决定是否需要它。

  1. 将面板放在表单上,​​将锚点设置到所有方向
  2. 将 PaintCaption 设置为 false 或使用空标题
  3. 在窗体上放置另一个面板,以便在调整窗体大小时,第一个面板的部分内容将被第二个面板覆盖。

运行程序并调整窗体大小,有时第一个面板的边框不会刷新。
发生这种情况是因为在 WMWindowPosChanged 中,在 (FullRepaint 或 (ShowCaption and (Caption <> ''))) 的情况下,将调用 invalidate,否则仅包含右侧和/或底部的矩形的 InvalidateRect(Handle, Rect, True)边界无效。(感谢 Sertac Akyuz 的更正)

正如您提到的,避免无效会减少闪烁,并且在许多情况下,没有给出完全无效的需要,因此用户可以自行决定如何继续。

面板很少会被使用,上部没有Fullrepaint

  • *“...否则只有不包括边框的矩形的 InvalidateRect(Handle, Rect, True)。”* 这是不正确的,您的解释与代码不匹配。相反,当 FullRepaint 为 false(并且没有标题)时,仅包含 *right* 和/或 *bottom* 边框的矩形无效 - 而不是不包括边框的矩形。 (2认同)