スプラッシュ画面上のテキストの点滅

解決


QU  2012-02-09 23:35:38  No: 41567

スプラッシュ画面上のテキストを点滅させたいです。
下のように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;


Quest  2012-02-10 00:33:55  No: 41568

for I := 0 to 10 do
    begin
      Sleep(500);
      ProcessMessages;
    end;
こうしたらどうでしょう。
Sleepの時間が長いと点滅がバラつくかもしれません。

スプラッシュフォームを消すタイミングは、別途タイマーを用意して
スプラッシュフォーム側で管理した方が良いかも知れません。


QU  2012-02-10 02:34:46  No: 41569

Questさん

Application.ProcessMessages;
この命令は知りませんでした。
助かりました、ありがとうございました。

>消すタイミング→スプラッシュフォーム側で管理
異常終了した場合に残ってしまうからでしょうか…
そうしてみます、ありがとうございました。


Quest  2012-02-10 04:50:21  No: 41570

解決していますが、ちょっとだけ。

>>消すタイミング→スプラッシュフォーム側で管理
>異常終了した場合に残ってしまうからでしょうか…
テストのためだと思いますが、メインのフォームに無駄なループを入れるより
SplashFormで勝手に消えてくれる方が、メイン側の処理が見やすくなるかなと。

  SplashForm:=TForm2.Create(self);
  try
    SplashForm.show;
    //初期化処理をここに(適当にProcessMessagesを入れる)
  finally
    SplashForm.free;
  end;
こうすれば、初期化処理を実行中に異常終了してもSplashFormは開放されます。
ただし、初期化処理中にSplashFormに進捗状況など何らかの表示を行いたいときは
メイン側で管理しなければならないでしょう。

"delphi スプラッシュ"でググると結構ありますので参考にどうぞ。


QU  2012-02-10 20:01:30  No: 41571

なるほど。
確かに初期化処理コードが長く続いた後に
SplashForm.free; が来るのは見づらいですね。
初期化処理を別プロシージャに書いておくのも手かもしれませんね。
ありがとうございました。

*追記*
初期化処理の前後にタイマーON/OFFを入れて、
タイマーで定期的に ProcessMessages を走らせてみました。
が、うまくはいきませんでした。
マルチタスク処理の勉強をしてみようと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加