不用Timer来计时?如何防止TLabel的画布被其他窗口擦除? (100分)

  • 主题发起人 主题发起人 chemer
  • 开始时间 开始时间
C

chemer

Unregistered / Unconfirmed
GUEST, unregistred user!
我听说TTimer控件不好,那不用Timer怎么计时?(具体些)

如何防止TLabel的画布被其他窗口擦除?

2个问题谢谢

 
用Image代替Label。
 
把问题描述详细一些,否则别人怎么帮你?
 
Timer占用大量系统资源,好像有一个onidle怎么用,可以代替 Timer计时就行。
 
那是你用TLabel画布的问题,跟TTimer有什么关系呢
 
1. Timer 的精度不高,只有不到 60ms ,并且优先级很低;但一般的应用都够了,
看你的要求喽,
不用的话,需要自己写循环,如 GetTickCount 在 Win9x 下可以达到 10ms 左右的精度,

2. 不明白,能说具体点吗?
 
1.Timer的OnTimer事件是放在Windows的消息队列中的,此事件是与其它消息一起排队来
执行的。当CPU比较繁忙时或者消息队列中其它事件比较多时,消息队列必定会向后延迟
或者停滞,这样就会出现ProgressBar2格一跳,Timer两秒才变一次的现象。
这在Windows这个所谓的多任务操作系统中是很常见的现象。

你如果想要非精确计时,可以直接使用TIMER事件。也可以找精度更高的计时控件,
比如:http://www.csdn.net/dev/Delphi/vcl/datetime/ 中有一个thdtimer控件
作者: Carlos Barbosa. 它是高精度的Timer控件,可以精确到1毫秒.

而想要精确计时的话,可以用API函数GetTickCount 来获得 Windows 启动以来经过的时间,
以毫秒为单位,这样所得时间差是准确的。

2. 画布是不能刷新的, 一刷新就没有了, 要么改用image控件,
如果你对delphi的图像处理比较熟的, 也可以事先将画布内容存入一个Tbitmap类中
在刷新事件发生时, 又将Tbitmap中的内容写回到你的画布中

 
在WM_showwindow消息里处理或刷性!
 
后退
顶部