求一代码(100分)

  • 主题发起人 主题发起人 baoping
  • 开始时间 开始时间
B

baoping

Unregistered / Unconfirmed
GUEST, unregistred user!
timer控制一label,依次显示0-9,每显示一次停顿300毫秒,

如点击button后要让label在8秒(8000毫秒)后显示为7,怎样写button的Click代码?timer的intervar可以逐渐变慢,目的是看着label在依次变化着。

即知道参数

8000毫秒后停止

目前显示数,即laben目前显示数,目的显示数,即最后要显示的数 等参数
 
先把 时钟控件的Enabled设为false,interval设为300;

unit Unit1;

interface

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

type
TForm1 = class(TForm)
lbl1: TLabel;
tmr1: TTimer;
btn1: TButton;
procedure tmr1Timer(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
a:Integer;
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.tmr1Timer(Sender: TObject);
begin
if a > 9 then a := 0;
lbl1.Caption := IntToStr(a);
Inc(a);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
tmr1.Enabled := True;
end;

end.
 
procedure TForm1.tmr1Timer(Sender: TObject);
begin
if a > 9 then a := 0;
lbl1.Caption := IntToStr(a);
Inc(a);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
tmr1.Enabled := False;
Sleep(8000);
Label1.Caption := '7'
end;

end.
 
感谢两位,上面的实现0-9 依次显示没问题,

现在是 怎样让 8000毫秒后停止,显示为7,不能直接显示为7,即Label1.Caption := '7',让慢慢滚,最后到7
 
目的是让label慢慢停下来 显示7
 
用 线程控制吧。
Timer里或者主窗体里sleep(),整个程序都在等待,别的活就干不了。
procedure TMsgThread.Execute;
begin
inherited;
while true do //循环执行
begin
sleep(200);
GetMsg;
if Terminated then
Break;
//application.ProcessMessages;
end;
end;
类似这样。
 
用2个timer
一个控制数字显示速度,一个启动并停止第一个timer
 
能不能 给个 代码
 
procedure TForm1.tmr1Timer(Sender: TObject);
begin
b := b + 300;
if (b >=8000 )and (a = 8) then // 判断断是不是已经过了8000 毫秒并且是8
begin
lbl1.Caption := '7';
Tmr1.Enable := False;
Exit;
end;
if a > 9 then a := 0;
lbl1.Caption := IntToStr(a);
Inc(a);
end;
 
多人接受答案了。
 
后退
顶部