各位,请教一个一个问题,小弟对这个不太了解
想要完成的功能是: 预置一个时间Time1执行一个操作,另在Time1之前1分钟Time2先执行另一个操作, 小弟写的代码有问题,请各位指教一下,谢谢FDateCode:integer;procedure TForm1.Button1Click(Sender: TObject);
var
DateStr : String;
begin
DateStr := self.Edit1.Text;
FDateCode := DateTimeToFileDate(StrtoDateTime(DateStr));
ShowMessage('计时器启动');
self.Timer2.Enabled := True;
self.Timer1.Enabled := True;end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DateTimeToFileDate(Now) = FDateCode then begin
ShowMessage('任务二');
self.Timer1.Enabled := False;
end;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if DateTimeToFileDate(Now) =(FDateCode - (60 * 1000))then begin
ShowMessage('任务一');
self.Timer2.Enabled := False;
end;
end;执行结果:Timer2中的“任务一”没有弹出,Timer1中的“任务二”可以弹出。
想要完成的功能是: 预置一个时间Time1执行一个操作,另在Time1之前1分钟Time2先执行另一个操作, 小弟写的代码有问题,请各位指教一下,谢谢FDateCode:integer;procedure TForm1.Button1Click(Sender: TObject);
var
DateStr : String;
begin
DateStr := self.Edit1.Text;
FDateCode := DateTimeToFileDate(StrtoDateTime(DateStr));
ShowMessage('计时器启动');
self.Timer2.Enabled := True;
self.Timer1.Enabled := True;end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DateTimeToFileDate(Now) = FDateCode then begin
ShowMessage('任务二');
self.Timer1.Enabled := False;
end;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if DateTimeToFileDate(Now) =(FDateCode - (60 * 1000))then begin
ShowMessage('任务一');
self.Timer2.Enabled := False;
end;
end;执行结果:Timer2中的“任务一”没有弹出,Timer1中的“任务二”可以弹出。
如果你只要"任务一"弹出一分钟后任务二”弹出
只要一个定时器,设interval为60000
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
ShowMessage('任务一');
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
ShowMessage('任务二');
Timer1.Enabled:=false;
end;end.
到达edit1的预定时间后,不可能再回到"前一分钟"去执行一个程序
要完成你的要求,只可能是将edit1设为"前一分钟"的时间,过一分钟后,再执行“任务二”
变通的作法是,将time1设定为edit1-1分钟执行,过一分钟,再执法行“任务二”
我就是这个 edit1 -1分钟,这里不会弄,能不能给个例子。谢谢!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,DateUtils, ExtCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Timer1: TTimer;
Timer2: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
FDateCode:TdateTime;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Interval:=500; //时间精度.5S
timer2.Interval:=60000; //一分钟
timer1.Enabled:=true;
FDateCode:=strtodatetime(edit1.text);
ShowMessage('计时器启动');
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if now>=FDateCode then
begin
Timer2.Enabled:=true;
Timer1.Enabled:=false;
ShowMessage('任务一');
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Timer2.Enabled:=false;
ShowMessage('任务二');end;end.
非常感谢你的讲解,问题已经明白了,这是我的解决方法.
请指教,再次感谢!
FDateCode1 : Integer;
FDateCode2 : integer;
FDateNum : Word;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
DateStr , timestr:TDateTime;
begin
DateStr := strtodatetime(self.Edit1.Text);
timestr := DateStr - (1/60/24);
FDateCode1:= DateTimeToFileDate(timestr);
FDateCode2:= DateTimeToFileDate(DateStr); ShowMessage('计时器启动');
self.Timer1.Enabled:= True;
self.Timer2.Enabled:= True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DateTimeToFileDate(now) = FDateCode1 then
begin
ShowMessage('前提任务');
self.Timer1.Enabled := False;
end;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if DateTimeToFileDate(now) = FDateCode2 then
begin
ShowMessage('最终任务');
self.Timer2.Enabled := False;
end;
end;