6

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

如何决定是否设置?

帮助只是指出:

FullRepaint 控制面板在调整大小时如何响应。当 FullRepaint 为 true 时,整个面板,包括斜角边框,在大小发生变化时会重新绘制。当 FullRepaint 为 false 时,仅重绘斜角边框内的区域。

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

该文本说明了它的作用,但没有说明原因...

4

2 回答 2

4

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

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

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

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

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

于 2013-02-10T07:21:47.400 回答
0

在以前的 Windows 版本中(不确定具体是哪个版本),FullRepaint当调整窗体大小时,需要防止面板边框上的图形伪影。据我所知,至少从 Windows XP 开始,这一直不是问题。

于 2013-02-10T00:59:27.720 回答