R.田中一郎さんのBlogに刺激されて書いてみます~。

スプラッシュウィンドウ
http://blogs.wankuma.com/rti/archive/2007/01/10/55358.aspx?Pending=true

起動に時間がかかるWindowsFormなど、かっちょいい前フリをして、ユーザのイライラを防ぐための手法として、
スプラッシュウインドウがありますね。

で、これ、 VB2005 だと、ノンコーディングで作成できてしまいます。

と言うことで、

●初心者向け解説

(1) VB2005 のプロジェクト新規作成
        テンプレートは、「Windowsアプリケーション」を選んでください。(まぁ、基本ってことで)

(2)【Point】 新しい項目の追加で「スプラッシュ スクリーン」を選びます。


(3)【Point】 プロジェクトデザイナ(プロジェクトのプロパティ)で、
  「アプリケーション」ペインの
  Windows アプリケーション フレームワーク プロパティ の
  スプラッシュスクリーン の コンボボックスに(2)で作成した「SplashScreen1」を選択します。

以上。

ささ、実行してください~。

 

●中級者向け解説

スプラッシュスクリーンをカスタマイズしましょう。

アプリケーションタイトル、バージョン、コピーライトなどは、
exeファイルなどのアセンブリに指定する AssemblyInfo.vb に連動しています。
ですので、Textプロパティを編集しても無駄です。

アプリケーションタイトル、バージョン、コピーライトの指定方法

(1)プロジェクトデザイナの「アセンブリ」ペインで、
 「アセンブリ情報」ボタンをクリック

(2)アセンブリ情報ウインドウで、必要な情報を設定

ここで、設定した値は、AssemblyInfo.vb に反映されます。
素人さんが誤った値を設定しないようにできてますね。すごい!!

"SplashWindowVBおぎわら")>

"")>

"")>

"SplashWindowVB")>

"Copyright (C)  2007 おぎわら")>

"")>

 

"1.2.3.4")>

"9.8.7.6")>

 

背景は、MainLayoutPanel の BackgroundImage で変更可能です。
BackgroundImageLayout で、表現を変えてもいいすね。


ここで、設定した値は、SplashScreen1.vbに自動生成されたコード内で、
各Textプロパティに設定されています。

ApplicationTitle.Text = My.Application.Info.Title
Version.Text = System.String.Format(Version.Text, _

My.Application.Info.Version.Major, My.Application.Info.Version.Minor)

Copyright.Text = My.Application.Info.Copyright

デザイン画面で、Textプロパティに値を設定しても、ここで、上書きされるので、
ムダムダムダムダムダー(ジョジョ風)ってことっすね。

ついでに、かっこよさを +5 あげてみましょう。

SplashScreen1 の Opacity プロパティを 50% に設定してください。

すると、こんなかんじで、透けたスプラッシュ スクリーンになります。


● 上級者向け解説

Windows アプリケーション フレームワークってなんだ?
なんで、VBだけこんな仕組みなんだ?
と、思った貴方!すばらしいで~す。

調べて、トラックバックしてください~(ぉぃ

というのは冗談で、
Visual Basic アプリケーションモデル という概念があります。

http://msdn2.microsoft.com/ja-jp/library/w3xx6ewx(VS.80).aspx

VBでは、Windows フォーム アプリケーションの動作を制御するための確たるモデルが用意されている。というわけです。

ということで、VB2005でWinFormアプリケーションを作成する場合は、ここをおさえておくと、
なぜ?という理由がわかるかと思います。

なお、内部のコード的には、スプラッシュ スクリーンを指定すると、
Application.Designer.vbに、以下のコードが自動生成されます。

        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _

        Protected Overrides Sub OnCreateSplashScreen()

            Me.SplashScreen = Global.SplashWindowVB.SplashScreen1

        End Sub

 

C#で実装したい場合は、
WindowsFormsApplicationBase.OnCreateSplashScreen() メソッド
を、使ったら出来そうですけど、
Microsoft.VisualBasic.ApplicationServices 名前空間なんですよね・・・・

ってことは、起動画面だけVBのプロジェクトにしたほうが、楽なんでは・・・・

C#のコードに置き換えることに成功した方は、おしえてくださいw