首页 > 解决方案 > 如何在 Lazarus Pascal 中使用 TTimeEdit?

问题描述

我需要自动将文件从一个目录复制到另一个目录(由用户设置,如 22:00)。我如何设置我的复制计划程序(每天直到手动停止)以在 TTimeEdit 中设置的时间开始?

这是我的代码:

var

    ScheduleStart : TTime;

begin

    Timer1.Enabled := false;

    ScheduleStart := (AutoStartTime.Time);

    if ScheduleStart > Now then Timer1.Enabled := true

    else

    begin

        showmessage('Copying is started...');

    end;

end;

有人可以帮我解决这个问题吗?

标签: delphipascalfreepascallazarus

解决方案


我想您的代码在计时器(Timer1)的 OnTimer 事件处理程序中工作。我不知道这个计时器的间隔,可能是 1 秒。因此,在激活计时器后一秒钟后,将调用此事件处理程序,但您的第一行会禁用计时器。还有一条线可以再次启用计时器,但是当当前时间在 ScheduleStart 之前时,永远不会达到这一点。要解决此问题:删除“Timer1.Enabled := false”。这样,计时器会定期检查是否达到 ScheduleStart。当它是您必须停用计时器以防止一次又一次地触发您的副本。所以,我会改变你的代码如下:

// Code to start the timer
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

// Code executed regularly while the timer it enabled.
procedure TForm1.Timer1Timer(Sender: TObject);
var 
  ScheduleStart : TTime;
begin
  ScheduleStart := AutoStartTime.Time;
  if Now() >= ScheduleStart then
  begin
    // strop triggering the event any more
    Timer1.Enabled := false;  
    // Execute the process
    ShowMessage('Copying has started...'); 
  end;
end;

推荐阅读