Label で TTimer のカウントダウンを表示することは可能ですか? ラベルキャプションに変数を即座に配置するように。どうすればいいのか考えていたのですが、フォームで目に見えるカウントダウンをやろうとしています。
質問する
1365 次
2 に答える
3
Ken White が言ったように、a にTTimer
は「カウントダウン」がありません。ただし、もちろん、アプリケーションに「カウントダウン」を実装することは可能です。以下は、これを行う 1 つの方法の例です。
新しい VCL アプリケーションを作成します。
という名前のプライベート整数変数
FCount
をフォーム クラスに追加します。OnCreate
フォームのイベント ハンドラーとして次のコードを使用します。
procedure TForm1.FormCreate(Sender: TObject);
begin
FCount := 10;
Randomize;
end;
OnPaint
イベント ハンドラーとして次のコードを使用します。
procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
S: string;
begin
Canvas.Brush.Color := RGB(Random(127), Random(127), Random(127));
Canvas.FillRect(ClientRect);
R := ClientRect;
S := IntToStr(FCount);
Canvas.Font.Height := ClientHeight div 2;
Canvas.Font.Name := 'Segoe UI';
Canvas.Font.Color := clWhite;
Canvas.TextRect(R, S, [tfCenter, tfSingleLine, tfVerticalCenter]);
end;
- フォームに a を追加し
TTimer
、次のコードをそのOnTimer
ハンドラーとして使用します。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FCount = 0 then
begin
Timer1.Enabled := false;
MessageBox(Handle, 'Countdown complete.', 'Countdown', MB_ICONINFORMATION);
Close;
end
else
begin
Invalidate;
dec(FCount);
end;
end;
Invalidate
フォームのOnResize
ハンドラーでメソッドを呼び出します。アプリケーションを実行します。
于 2015-11-26T22:45:17.320 に答える
1
FCount
変数を取得して、物事を単純に保ちましょう。
ここでは、カウントが に達するとタイマーが停止します0
。
procedure TForm1.FormCreate(Sender: TObject);
begin
FCount := 10;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := IntToStr(FCount);
Dec(FCount);
if FCount < 0 then begin
FCount := 10;
Timer2.Enabled := False;
end;
end;
以下は、 Andreas Rejbrandの回答から変数TThread
を取得することを回避するクラスに基づくアプローチを使用していますFCount
procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure
var
countFrom, countTo: Integer;
evt: TEvent;
begin
countFrom := 10;
countTo := 0;
evt := TEvent.Create(nil, False, False, '');
try
while countTo <= countFrom do begin
TThread.Synchronize(procedure
begin
label1.Caption := IntToStr(countFrom);
end);
evt.WaitFor(1000);
Dec(countFrom);
end;
finally
evt.Free;
end;
end).Start;
end;
于 2015-11-27T13:59:35.997 に答える