问一个用TTImer定时的问题 ( 积分: 50 )

C

coastor

Unregistered / Unconfirmed
GUEST, unregistred user!
希望用TTimer实现一个定时的功能,基本思想是先用一个AnsiString 保存一个时间格式的
字符串“XX:XX:XX”,然后在TTimer事件中提取系统时钟,转换成相同的字符串格式,然后比较,比较相同后发生下一步的动作,可是运行起来没反应,TTimer中的相关代码如下
TDateTime DateTime = Time();
AnsiString sTime = TimeToStr(DateTime);
Label1->Caption = sTime;
if(sTime.AnsiCompare("9:48:00")==0)
Label1->Font->Color=clGreen;
//到时间后实际颜色没变
结果字体颜色没变,我还用了另一种方法提取系统时间
Label1->Caption=Now().TimeString();
AnsiString sTime;
sTime=Label1->Caption ;
结果还是没反应,比较部分if( )那块也试过别的办法,也不行
属性interval也设置的足够小,不存在跳过去,没比较到的可能
我还是学生,望前辈指点一二
还有一点不明白,我把interval设大之后我感觉TTimer事件发生的间隔就会变大,比如上面的代码中有把时间显示出来的功能,我把interval设置成5000,那我想表示时间的Caption应该是隔五秒一跳才对,可是时间显示却是连续变化,why??
 
希望用TTimer实现一个定时的功能,基本思想是先用一个AnsiString 保存一个时间格式的
字符串“XX:XX:XX”,然后在TTimer事件中提取系统时钟,转换成相同的字符串格式,然后比较,比较相同后发生下一步的动作,可是运行起来没反应,TTimer中的相关代码如下
TDateTime DateTime = Time();
AnsiString sTime = TimeToStr(DateTime);
Label1->Caption = sTime;
if(sTime.AnsiCompare("9:48:00")==0)
Label1->Font->Color=clGreen;
//到时间后实际颜色没变
结果字体颜色没变,我还用了另一种方法提取系统时间
Label1->Caption=Now().TimeString();
AnsiString sTime;
sTime=Label1->Caption ;
结果还是没反应,比较部分if( )那块也试过别的办法,也不行
属性interval也设置的足够小,不存在跳过去,没比较到的可能
我还是学生,望前辈指点一二
还有一点不明白,我把interval设大之后我感觉TTimer事件发生的间隔就会变大,比如上面的代码中有把时间显示出来的功能,我把interval设置成5000,那我想表示时间的Caption应该是隔五秒一跳才对,可是时间显示却是连续变化,why??
 
你把'9:48:00'换成'09:48:00'试试
 
>>if(sTime.AnsiCompare("9:48:00")==0)
改成 if(sTime='9:48:00') 试试看
不过你可以不要转成字符串.而直接用时间比较.肯定可以
如:
//TTimer外
oldtime:TTime;
...
oldtime:=strtotime('9:48:00')
...
//TTimer内
if (oldtime=time()) then
...
 
我把interval设大之后我感觉TTimer事件发生的间隔就会变大,比如上面的代码中有把时间显示出来的功能,我把interval设置成5000,那我想表示时间的Caption应该是隔五秒一跳才对,可是时间显示却是连续变化,why??
//是5秒才显示一次,我试过了没问题的
你再编译试试
 
不管怎么试,用等号是不行了,不过czcn给了个很好的提示,用TDataTime变量去比。这样我就可以用‘>’来完成任务。Time()>oldTime时事件有反应。但我还没想明白为啥不能用==来处理。难道机器太水了?! Athlon700+,这有影响吗?
 
结了帖也发:
<<但我还没想明白为啥不能用==来处理。
我不太清楚C++ Builder
我知道在VC里==是判断是否相等,=为赋值
delphi中=是判断是否相等。:=为赋值
至于C++ Builder嘛都是Borland的东东
是否=为判断就不太清楚了
 
顶部