スプラッシュ画面上のテキストを点滅させたいです。
下のようにLabelの表示/非表示を試みましたが失敗でした。
絵でも何でも良いので、とにかくスプラッシュフォーム上の
何かを点滅させたいでのすが、どうすれば良いでしょうか?
// Unit1 --------------------
procedure TForm1.FormCreate(Sender: TObject);
var
SplashForm : TForm2;
I: Integer;
begin
SplashForm:=TForm2.Create(self);
SplashForm.show;
begin
for I := 0 to 10 do
begin
Sleep(500);
end;
end;
SplashForm.free;
end;
// Unit2 --------------------
procedure TForm2.Timer1Timer(Sender: TObject);
begin
label1.Visible := not label1.Visible;
end;
for I := 0 to 10 do
begin
Sleep(500);
ProcessMessages;
end;
こうしたらどうでしょう。
Sleepの時間が長いと点滅がバラつくかもしれません。
スプラッシュフォームを消すタイミングは、別途タイマーを用意して
スプラッシュフォーム側で管理した方が良いかも知れません。
Questさん
Application.ProcessMessages;
この命令は知りませんでした。
助かりました、ありがとうございました。
>消すタイミング→スプラッシュフォーム側で管理
異常終了した場合に残ってしまうからでしょうか…
そうしてみます、ありがとうございました。
解決していますが、ちょっとだけ。
>>消すタイミング→スプラッシュフォーム側で管理
>異常終了した場合に残ってしまうからでしょうか…
テストのためだと思いますが、メインのフォームに無駄なループを入れるより
SplashFormで勝手に消えてくれる方が、メイン側の処理が見やすくなるかなと。
SplashForm:=TForm2.Create(self);
try
SplashForm.show;
//初期化処理をここに(適当にProcessMessagesを入れる)
finally
SplashForm.free;
end;
こうすれば、初期化処理を実行中に異常終了してもSplashFormは開放されます。
ただし、初期化処理中にSplashFormに進捗状況など何らかの表示を行いたいときは
メイン側で管理しなければならないでしょう。
"delphi スプラッシュ"でググると結構ありますので参考にどうぞ。
なるほど。
確かに初期化処理コードが長く続いた後に
SplashForm.free; が来るのは見づらいですね。
初期化処理を別プロシージャに書いておくのも手かもしれませんね。
ありがとうございました。
*追記*
初期化処理の前後にタイマーON/OFFを入れて、
タイマーで定期的に ProcessMessages を走らせてみました。
が、うまくはいきませんでした。
マルチタスク処理の勉強をしてみようと思います。
ツイート | ![]() |