プログラム内で処理完了や未入力項目があることを知らせるために
メッセージダイアログがよく使用されていますが、それ以外にメッセージ用の
TLabelを用意しておき、それに表示する方法もあります。
TLabelだとダイアログへの応答は不要になりますが、
メッセージを表示しただけではわかりにくい場合もあります。
今回はそれを目立たせるためにTLabelを点滅させる方法をご紹介します。
TLabel自体にはそのようなメソッド等は用意されていませんが、
TTimerコンポーネントを使用して、一定時間毎にTLabelのVisibleを切り替えることで、
表示と非表示を繰り返しますので、点滅しているように見せることができます。
TTimerコンポーネントのIntervalプロパティで、
指定したミリ秒(1000で1秒)ごとにOnTimerイベントが発生します。
またEnabledプロパティがTrueでイベントが発生し、Falseで発生しなくなりますので、
例えばメッセージ表示後に3回点滅するとした場合、次のようなコードになります。
点滅間隔はIntervalプロパティ で指定した時間になります。
また回数をカウントする変数(ここでは FiCount )は他のイベントでも使用するため private節に宣言します。
メッセージ表示時にタイマー起動するには、Enabled を Trueにします。
procedure TForm1.Button1Click(Sender: TObject);
begin
//処理実行
…
Label1.Caption := '処理が終了しました';
FiCount := 0;
Timer1.Enabled := True;
end;
次に、タイマーでVisibleを切り替えます。
またOnTimerイベントが5回実行されると、EnbaledをFalseにしてタイマーを停止しています。
(Visibleの切り替えで画面上には3回表示される)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FiCount <= 5 then
begin
Label1.Visible := not Label1.Visible;
FiCount := FiCount + 1;
end
else
begin
Label1.Visible := False;
Timer1.Enabled := False;
end;
end;
なおTTimerコンポーネントのEnabledの初期設定は設計時か、
またはフォームのOnCreateイベントなどでFalseに設定しておきます。
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Visible := False;
Timer1.Enabled := False;
end;
<動作イメージ>
このサンプルではTTimerのIntervalは500(0.5秒)に設定しています。
またインパクトを出すために、Label1に以下のプロパティを設定しています。
・Alignment = taCenter(文字を中央揃え)
・AutoSize = False(Captionが変更されてもWidthを自動調節しない)
・Color = clYellow(背景を黄色にする)
・Font.Size = 18(大きめ)
・Font.Style = [fsBold](太字)
・Transparent = False(背景色を透過させない)
・Width = 260(広めに設定する)