Delphi 如何使用带有多个参数的while循环?

Delphi 如何使用带有多个参数的while循环?,delphi,Delphi,我想用Delphi做一个倒计时。我曾经 while(t<>0 and m<>0 and s<>0) do while(t0和m0及s0)do 但该计划不接受它。如何修复此问题?您需要的代码是: while (t<>0) and (m<>0) and (s<>0) do 由于和的优先级高于,因此表达式被解释为: t<>(0 and m)<>(0 and s)<>0 t(0和m)(0和

我想用Delphi做一个倒计时。我曾经

while(t<>0 and m<>0 and s<>0) do
while(t0和m0及s0)do
但该计划不接受它。如何修复此问题?

您需要的代码是:

while (t<>0) and (m<>0) and (s<>0) do
由于
的优先级高于
,因此表达式被解释为:

t<>(0 and m)<>(0 and s)<>0
t(0和m)(0和s)0
这是一个明显的语法错误

此处记录了优先顺序:

您需要的代码是:

while (t<>0) and (m<>0) and (s<>0) do
由于
的优先级高于
,因此表达式被解释为:

t<>(0 and m)<>(0 and s)<>0
t(0和m)(0和s)0
这是一个明显的语法错误

此处记录了优先顺序:


在函数中根本不需要循环。这是因为您使用的是计时器,它在每个时间间隔调用一次

你只需要像这样减少变量

procedure TForm1.Timer1Timer(Sender: TObject) 
begin 
  Label1.Caption:=IntToStr(t)+':'+IntToStr(m)+':'+IntToStr(s); 
  if s > 0 then dec( s)
  else
  begin
    s := 59;
    if m>0 then dec(m)
    else
    begin
      m := 59;
      if t>0 then dec( t )
      else Label2.Caption:='it is done' 
    end;
  end;
end;

在函数中根本不需要循环。这是因为您使用的是计时器,它在每个时间间隔调用一次

你只需要像这样减少变量

procedure TForm1.Timer1Timer(Sender: TObject) 
begin 
  Label1.Caption:=IntToStr(t)+':'+IntToStr(m)+':'+IntToStr(s); 
  if s > 0 then dec( s)
  else
  begin
    s := 59;
    if m>0 then dec(m)
    else
    begin
      m := 59;
      if t>0 then dec( t )
      else Label2.Caption:='it is done' 
    end;
  end;
end;

它应该是当(t0)和(m0)和(s0)做的时候。只有一个音符;这不会作为倒计时计时器的主循环工作(如果这是目的;我不确定,因为我希望变量
h
m
s
,而不是
t
m
s
,但这可能来自您的母语,我假设
t
是一个小时变量)。如果是这样的话,考虑一下当你开始计数时会发生什么,比如说10秒。您将拥有
h=0、m=0、s=10
,并且您仅在
(h0)和(m0)和(s0)
时才尝试倒计时,因为
h
m
变量已经在0中,所以即使是一次迭代也无法通过。谢谢您的回答,非常感谢。我使用了它,它工作正常,但我有一个sam问题,循环速度非常快,它显示了最后的时间,0:0:0。而且它也没有显示coutdown第二。。。我需要你的帮助来解决这个问题,为此我添加了程序,谢谢程序TForm1。Timer1Timer(发送方:TObject)在(t0)或(m0)或(s0)确实开始标签1时开始。说明:=IntToStr(t)+':“+IntToStr(m)+':”+IntToStr(s);对于i:=0到59,开始ms:=ms+1;如果是s0,则从12月开始;如果m=0,则结束;如果t=0,则开始;如果t=0,则结束;如果t=0,则结束;如果m=0,则结束;如果t=0,则结束;如果m=0,则结束;如果t=0,则结束;如果t=0,则结束;如果m=0,则结束;m:=59;s:=60;终止结束或开始12月(m);s:=60;标签1.标题:=IntToStr(t)+':'+IntToStr(m)+':'+IntToStr(s);很抱歉,我无法附加该程序,我不得不删除很多内容才能发送给您。。希望你能看到。谢谢。应该是(t0)和(m0)和(s0)做的。只要一个音符;这不会作为倒计时计时器的主循环工作(如果这是目的;我不确定,因为我希望变量
h
m
s
,而不是
t
m
s
,但这可能来自您的母语,我假设
t
是一个小时变量)。如果是这样的话,考虑一下当你开始计数时会发生什么,比如说10秒。您将拥有
h=0、m=0、s=10
,并且您仅在
(h0)和(m0)和(s0)
时才尝试倒计时,因为
h
m
变量已经在0中,所以即使是一次迭代也无法通过。谢谢您的回答,非常感谢。我使用了它,它工作正常,但我有一个sam问题,循环速度非常快,它显示了最后的时间,0:0:0。而且它也没有显示coutdown第二。。。我需要你的帮助来解决这个问题,为此我添加了程序,谢谢程序TForm1。Timer1Timer(发送方:TObject)在(t0)或(m0)或(s0)确实开始标签1时开始。说明:=IntToStr(t)+':“+IntToStr(m)+':”+IntToStr(s);对于i:=0到59,开始ms:=ms+1;如果是s0,则从12月开始;如果m=0,则结束;如果t=0,则开始;如果t=0,则结束;如果t=0,则结束;如果m=0,则结束;如果t=0,则结束;如果m=0,则结束;如果t=0,则结束;如果t=0,则结束;如果m=0,则结束;m:=59;s:=60;终止结束或开始12月(m);s:=60;标签1.标题:=IntToStr(t)+':'+IntToStr(m)+':'+IntToStr(s);很抱歉,我无法附加该程序,我不得不删除很多内容才能发送给您。。希望你能看到。谢谢你,谢谢你。。。我发现计时器有另一个问题。。。当我重新启动进程时,计时器的旧值出现并倒计时。。。我使用了一个按钮来终止整个应用程序,但它不起作用。我关掉电脑,重新启动,用其他值编译程序,但计时器用的是旧时间。。。我不知道该如何重置计时器?因为没有这样的命令。。。我感谢你的帮助。。。最好的问候,维纳斯你需要说你从哪里得到你的初始定时器值(t,m和s)。他们坚持是不寻常的,或者你是说他们不坚持,你希望他们坚持?谢谢你的回答…我用了一个例子,倒计时非常有效。我在倒计时结束前关闭了程序。当我运行原始程序时,它出现在旧时间,并继续倒计时。我实际上计算了一些东西,这个过程需要特殊的时间,应该是倒计时来完成这个过程。我使用Application.Terminate按钮停止或完成它,但它不起作用。我添加了Timer1。Enabled:=false;而且它几乎起作用了。在前面的过程中,我添加了Timer1.Enabled:=true;而且很有效。。我需要更好的解决方案venusOK我想我理解。这真的是另一个问题,所以你应该把这一个标记为完整,然后开始一个新的问题。但是,您需要做的是在表单中。OnClose将当前时间(Now())和t、m和s的值存储在某个位置,例如在注册表或INI文件中,然后读回这些值,以便使用新值重新计算t、m和s。如果你需要更多的帮助,请开始一个新的线程。谢谢你的帮助。。。我发现计时器有另一个问题。。。当我重新启动进程时,计时器的旧值出现并计数