- PR -

ダイアログでGif画像を動かすには?

1
投稿者投稿内容
フィーバー
常連さん
会議室デビュー日: 2006/08/30
投稿数: 22
投稿日時: 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
となっております。

処理中もきちんと動かすにはどうすればよいのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-30 20:00
引用:

フィーバーさんの書き込み (2006-09-30 19:15) より:

処理中もきちんと動かすにはどうすればよいのでしょうか?


'以下の部分' で描画メッセージを止めないようにします。

引用:

〜データ読み込み・データ書き込み処理〜


なぜ、描画されないのかがわかれば解決に近づくと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
フィーバー
常連さん
会議室デビュー日: 2006/08/30
投稿数: 22
投稿日時: 2006-09-30 20:50
>なぜ、描画されないのかがわかれば解決に近づくと思います。

〜データ読み込み・データ書き込み処理〜
の時にタスクマネージャーを見てみると、CPUがほぼ100%使用されていましたので、
〜データ読み込み・データ書き込み処理〜 にCPUが使われすぎていて
画像を動かす余裕がないためかと思いますが・・・

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-30 21:16
引用:

フィーバーさんの書き込み (2006-09-30 20:50) より:

〜データ読み込み・データ書き込み処理〜
の時にタスクマネージャーを見てみると、CPUがほぼ100%使用されていましたので、
〜データ読み込み・データ書き込み処理〜 にCPUが使われすぎていて
画像を動かす余裕がないためかと思いますが・・・


以下のどちらか好きな方を考えてみてください。
  1. では、余裕を作るにはどうすれば良いと思いますか?
  2. 処理の途中で強制的に描画させるにはどうしたら良いでしょうか?
ここまで来て不思議に思ったのですが、

引用:

' メッセージ・キューにあるWindowsメッセージをすべて処理する
Application.DoEvents()


これが、何のために必要なのか理解していますか? (コメントがズバリ答えなのですが)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
フィーバー
常連さん
会議室デビュー日: 2006/08/30
投稿数: 22
投稿日時: 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
に記載されているのを参考に取り入れたんですが、
正直、理解はしているとは言えません。すいません。




じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-02 17:31
引用:

フィーバーさんの書き込み (2006-10-02 15:53) より:

Application.DoEvents() の方なんですが、
http://www.atmarkit.co.jp/fdotnet/dotnettips/136doevents/doevents.html
に記載されているのを参考に取り入れたんですが、
正直、理解はしているとは言えません。すいません。


謝ることはないと思いますよ。
BackgroundWorker を使う方法が望ましいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)