【发布时间】: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