【问题标题】:Delphi: Right aligned panel flickers upon resizing formDelphi:调整表格大小时右对齐面板闪烁
【发布时间】:2012-02-19 22:03:36
【问题描述】:

应该很简单,但我不知道怎么做。

我创建了一个带有右对齐面板的表单,例如,我将其涂成蓝色。

如果我抓住表单的左边缘并快速水平地来回调整大小,我希望右侧面板不要移动或闪烁。由于它的位置没有改变,它没有理由不保持完全稳定。有人知道解决这个看似简单的问题的简单技巧吗?

谢谢

【问题讨论】:

  • 尝试在表单构造函数中设置DoubleBuffered := True
  • 其实这不是闪烁问题,是对齐问题。其他问题在这里无济于事。
  • 我确实将 doubleBuffered 设置为 TRUE。我还尝试通过在 FormResize 方法中定位右侧面板来自己进行对齐。没有运气。
  • 大概真正的应用程序有一个面板,其中包含控件而不仅仅是蓝色?
  • 是的,真正的应用程序在面板中有一个客户端对齐的列表视图。但我认为我应该先尝试解决最简单的情况。 :-)

标签: delphi resize drawing flicker


【解决方案1】:

这只是 Windows GUI 应用程序的现实。您可以在 WinForms 应用程序中甚至在主流 Windows 应用程序中看到相同的效果。例如,打开一个资源管理器窗口并执行完全相同的操作,通过抓住窗口的左边缘来调整大小。您将看到完全相同的效果。您可以通过从任何边缘调整大小来看到相同的效果。 Word 和 Excel 的行为方式相同。

我的猜测是,Windows 在发送允许应用重新调整其控件的调整大小消息之前,会在调整大小循环中重新绘制。

【讨论】:

  • 你可能是对的,但我觉得很难接受。在我看来,即使它并不总是很容易实现,我们也应该尽量避免在不必要的时候重新绘制窗口的一部分。在我描述的简单情况下,唯一应该重新绘制的部分是受调整大小影响的部分。因此,右侧面板应保持稳定。
  • 如果窗口管理器正在执行此操作,那么您就是不走运。值得尝试以不同方式呈现退出的 XP。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多