关于CASE语句的问题?(50分)

  • 主题发起人 主题发起人 sunylat
  • 开始时间 开始时间
S

sunylat

Unregistered / Unconfirmed
GUEST, unregistred user!
您好:
我想用CASE语句实现每隔一个小时就执行一段指定代码的程序,但不知如何处理对时间的判断,请指教,谢谢!
例如:时间(如:20:30:01)
CASE 时间值变量 OF
时间值变量:执行代码;
时间值变量:执行代码;
ELSE
时间值变量:执行代码;
END;
请给段代码!!!!
 
CASE 语句后的变量必须为有序类型,时间变量不符合条件。
 
将时间变量转化为LONGINT,可以使用
 
把时间分解,然后判断
decodedatetime
 
时间变量类型不行
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1358621
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
T:TDateTime;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
T:=Now;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Hour, Min, Sec, MSec: Word;
HouO, MiO, SeO, MSeO: Word;
begin
DecodeTime(Now,Hour,Min,Sec,MSec);
DecodeTime(T,HouO,MiO,SeO,MSeO);
case Hour-HouO of
1:一小時時執行代碼;
2:二小時時執行代碼;
3..100:三到一百小時時執行的代碼;
end;
end;

end.
 
上面的例子不是很严密
如当有两个时间:23:55:55 0:55:55



 
case 语句只能对顺序类型有效,
时间变量实际上是数字类型(小数部分,日期是整数部分),type TDateTime = type Double;
既然是数字类型,就可以转化成整型,然后就可以使用case语句了,方案如下:
CASE 时间值变量*86400 OF //24*60*60=86400;
时间值变量*86400 :执行代码;
时间值变量*86400 :执行代码;
ELSE
时间值变量*86400 :执行代码;
END;
如果你的时间是精确到微秒的话,再乘1000然后圆整,就没问题了。
 
用个timer,间隔一小时=3600000,在timer里对一个全局
变量timeCount +1, 不用处理对时间的判断,timer会帮你
干的。

主程序里,初始 timecount:=0, timer1.enabled:=true;

timer里:
timeCount:=timecount+1;
case timecount of
1:一小時時執行代碼;
2:二小時時執行代碼;
3..100:三到一百小時時執行的代碼;
end;

 
上面老兄说得很对!
 
后退
顶部