各位,请教一个一个问题,小弟对这个不太了解
想要完成的功能是: 预置一个时间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中的“任务二”可以弹出。

解决方案 »

  1.   

    除非时光能倒流,否则你的任务一不可能被弹出
    如果你只要"任务一"弹出一分钟后任务二”弹出
    只要一个定时器,设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.
      

  2.   

    我的意思是说,edit中预置一个时间time1,到time1时执行一个操作,而在time1前1分钟先执行另一个操作,而不是立刻执行一个操作(此操作始终在time1前1分钟执行),达到time1后再执行预置操作。
      

  3.   

    这是一个概念问题:
    到达edit1的预定时间后,不可能再回到"前一分钟"去执行一个程序
    要完成你的要求,只可能是将edit1设为"前一分钟"的时间,过一分钟后,再执行“任务二”
      

  4.   

    变通的作法是,将time1设定为edit1-1分钟执行,过一分钟,再执法行“任务二”
      

  5.   

    To Keiy():
    变通的作法是,将time1设定为edit1-1分钟执行,过一分钟,再执法行“任务二”
    我就是这个 edit1 -1分钟,这里不会弄,能不能给个例子。谢谢!
      

  6.   

    unit testtime;interfaceuses
      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.
      

  7.   

    To Keiy():
       非常感谢你的讲解,问题已经明白了,这是我的解决方法.
    请指教,再次感谢!
        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;