プログレスバー付きスプラッシュフォームを表示する。
アプリケーションが大きくなってくると、起動に時間が掛かるようになってきます。この起動時間をごまかすための手段のひとつとして、スプラッシュフォームの表示があげられます。もし、アプリケーションの起動がフォームの数が多く、各々のフォームでの初期化に時間がかかるのであれば、スプラッシュフォームに起動の進捗度を表示するのも起動時間をごまかす手として使用出来ると思います。
ここでは、私がMIBackupの起動が遅くなってしまったのをごまかすために使用した方法を示します。
スプラッシュフォームは、プロジェクトマネージャで「選択可能なフォーム」として登録して、プロジェクトソースの先頭で生成,表示しておいて、アプリケーション実行前に破棄するのが一つの手法として使われます。
そこで、プロジェクトソースにもう少し手を加えてやろうというのが今回の進捗表示です。
以下にサンプルのプロジェクトソースを示します(プロジェクトソースは、Delphiの表示メニューからプロジェクトソースを選択することで表示されます。もちろん編集も可能です)。
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {Form5},
Unit6 in 'Unit6.pas' {Splash};
{$R *.RES}
var // スプラッシュウィンドウ生成用の
splash: TSplash; // 宣言を追加する
begin
{ もともとのプロジェクトソースは以下のようになっているが
これに手作業で処理を追加していく
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
Application.Run;
}
Application.Initialize;
// 全てのフォームの生成前にスプラッシュフォームを生成する
splash := TSplash.Create(nil); // 生成
splash.Show; // 表示
// スプラッシュフォーム上のオブジェクトが確実に表示される様に
// ProcessMessagesを呼ぶ
Application.ProcessMessages;
Application.CreateForm(TForm1, Form1);
splash.ProgressBar1.Position := 20; // 20%
Application.CreateForm(TForm2, Form2);
splash.ProgressBar1.Position := 40; // 40%
Application.CreateForm(TForm3, Form3);
splash.ProgressBar1.Position := 60; // 60%
Application.CreateForm(TForm4, Form4);
splash.ProgressBar1.Position := 80; // 80%
Application.CreateForm(TForm5, Form5);
splash.ProgressBar1.Position := 100; // 100%
// 100%を表示するよう一応ProcessMessagesを呼ぶ(効果はないかも)
Application.ProcessMessages;
// アプリケーション実行の前にスプラッシュフォームを破棄する
splash.Release;
Application.Run;
end.
プロジェクトソースに手を加えると、プロジェクトマネージー・ オプション「フォーム」の自動生成の対象からメインフォーム 以外のフォームがはずれて(生成可能なフォームに移動)しまい ます。
これはプロジェクトマネージャーがプロジェクトソースを解析出来なくなるためだと考えられます。
実際には自動生成の処理を行っていますので、気持ち悪いですが無視しても問題ありません。
スプラッシュウィンドウに起動の進捗度を表示するだけで、結構簡単に見栄えを良くすることが出来ます。
また、このプロジェクトソースをいじると、他にも色々と面白いことが出来そうです。
以下をクリックするとサンプルのソースをダウンロード出来ます。ぜひ試してみてください。
※サンプルではフォームを5つ使用していますが、実際の処理はなにも行っていません。また、各フォームの生成に時間をかけるために、わざとFormCreateで1秒間のウェイトを入れてあります。
サンプルのダウンロード(4,894byte)