- - PR -
ダイアログでGif画像を動かすには?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-30 19:15
環境 vb 2005 エクスプレス
あるフォームでデータの読み込み時、書き込み時に ダイアログを表示しております。 コードは 'ダイアログを表示する Dim dlg As WaitDialog1 = New WaitDialog1 dlg.Show() Application.DoEvents() 'マウスカーソルをウエイト表示にし、フォームの操作を無効にする。 Windows.Forms.Cursor.Current = Cursors.WaitCursor Me.Enabled = False 〜データ読み込み・データ書き込み処理〜 ' メッセージ・キューにあるWindowsメッセージをすべて処理する Application.DoEvents() 'マウスカーソルを通常にする Windows.Forms.Cursor.Current = Cursors.Default 'フォームを有効にする Me.Enabled = True 'ダイアログを閉じる dlg.Close() となっております。 そのダイアログにゴミ箱を空にするときと同じようなイメージで Gif画像を表示したく考えておりますが、 ダイアログにピクチャボックスを配置してみましたが、 Gif画像はデータ読み込み・書き込み処理中は動かなくて、 ダイアログが閉じる寸前に少しだけ動く程度でした。 ダイアログのコードは Public Class WaitDialog1 Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams Get Const WS_EX_DLGMODALFRAME As Integer = &H1 Dim cp As CreateParams = MyBase.CreateParams cp.ExStyle = cp.ExStyle Or WS_EX_DLGMODALFRAME Return cp End Get End Property Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_SYSCOMMAND As Integer = &H112 Const SC_CLOSE As Integer = &HF060 If (m.Msg = WM_SYSCOMMAND) AndAlso (m.WParam.ToInt32() = SC_CLOSE) Then Return ' Windows標準の処理は行わない End If MyBase.WndProc(m) End Sub Private Sub WaitDialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class となっております。 処理中もきちんと動かすにはどうすればよいのでしょうか? | ||||||||
|
投稿日時: 2006-09-30 20:00
'以下の部分' で描画メッセージを止めないようにします。
なぜ、描画されないのかがわかれば解決に近づくと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-09-30 20:50
>なぜ、描画されないのかがわかれば解決に近づくと思います。
〜データ読み込み・データ書き込み処理〜 の時にタスクマネージャーを見てみると、CPUがほぼ100%使用されていましたので、 〜データ読み込み・データ書き込み処理〜 にCPUが使われすぎていて 画像を動かす余裕がないためかと思いますが・・・ | ||||||||
|
投稿日時: 2006-09-30 21:16
以下のどちらか好きな方を考えてみてください。
これが、何のために必要なのか理解していますか? (コメントがズバリ答えなのですが) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-10-02 15:53
返事が遅くなり申し訳ございません。
>以下のどちらか好きな方を考えてみてください。 >1.では、余裕を作るにはどうすれば良いと思いますか? >2.処理の途中で強制的に描画させるにはどうしたら良いでしょうか? 答えになっていないかもしれませんが、 http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html を参考にさせていただき、別のスレッドで行えば良いという事で、 バックグランドワーカーを配置しました。 'バックグランドワーカーの処理内容 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 〜データ読み込み・データ書き込み処理〜 End Sub 'バックグランドワーカーが動作終了したら Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted 'マウスカーソルを通常にする Windows.Forms.Cursor.Current = Cursors.Default 'フォームを有効にする Me.Enabled = True 'ダイアログを閉じる dlg.Close() End Sub Private Sub BT1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT1.Click Dim dlg As WaitDialog1 = New WaitDialog1 dlg.Show() 'マウスカーソルをウエイト表示にし、フォームの操作を無効にする。 Windows.Forms.Cursor.Current = Cursors.WaitCursor Me.Enabled = False Me.BackgroundWorker1.RunWorkerAsync() end sub たぶん、方法としては1の余裕を作るになると思いますが、 これで動きました。 Application.DoEvents() の方なんですが、 http://www.atmarkit.co.jp/fdotnet/dotnettips/136doevents/doevents.html に記載されているのを参考に取り入れたんですが、 正直、理解はしているとは言えません。すいません。 | ||||||||
|
投稿日時: 2006-10-02 17:31
謝ることはないと思いますよ。 BackgroundWorker を使う方法が望ましいです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1