【问题标题】:Animation/Redrawing of moving panels is flickering badly - suggestions?移动面板的动画/重绘闪烁严重 - 建议?
【发布时间】:2012-12-02 13:26:04
【问题描述】:

希望你们中的一些人能够在我为应用程序中的某些组件“制作动画”时指出正确的方向来处理闪烁/撕裂/重绘问题。

我必须先说“动画”在不处于全屏模式(即 1024*768,borderstyle=bsSingle)时似乎可以正常工作(没有闪烁等)。当应用程序接管完整的监视器并且边框样式变为 bsNone 时,此问题变得更加明显。

有 2 个“动画”:

1 - 使用 Winapi AnimateWindow 方法从左到右滚动面板

2 - TmsAdvPolyPager 逐步浏览其每一项并随后显示其“页面”

滚动面板时,“退出”的面板会留下“轨迹”,动画似乎在颤抖,不再流畅。

当单步执行 TmsAdvPolyPager 项时,下一项有时不会突出显示,并且它显示的页面通常具有上一个面板的“残差”。

两个动画都由计时器触发 - AnimateWindow 在它自己的线程中,而 PolyPager 步进不在。

所以,基本上 - 关于如何平滑这些动画并强制正确重绘 TmsAdvPolyPager 组件的任何想法?第一次尝试这种东西,所以不完全确定要研究什么。

一如既往,非常感谢您的帮助!

【问题讨论】:

  • 您是否尝试过将 YourForm.DoubleBuffered 设置为 True?
  • 您应该永远通过移动窗口(或者,就此而言,任何控件)来制作动画!改为使用 GDI 手动绘制窗口!一些半相关的例子:stackoverflow.com/questions/7223678/…
  • 我不明白为什么人们坚持认为TForm.DoubleBuffered 是好的。
  • 这是在 VM 中(哪个?当前的 VMWare Player 有屏幕刷新问题)还是“只是”在主机上?
  • @JanDoggen 将其从 VMWorkstation 移到实际机器上解决了大部分问题!

标签: delphi delphi-xe2 tms animatewindow


【解决方案1】:

TPaintBox 是您所需要的,可能在 TScroller 上。

转储面板并在 TPaintbox 画布上绘制矩形。

您显然已经编写了 99% 的代码,因此移动到已定义的矩形应该不是问题 :)

【讨论】:

  • 或者,如果合适的话,创建您自己的自定义控件,然后绘制到它的画布上。然而说起来容易做起来难。
  • 虽然在实际机器上运行它解决了主要问题,但我还是要试一试,看看我能用它做什么!谢谢!
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 2013-07-20
  • 2013-08-27
  • 2021-10-12
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多