ページ 11

Windowの更新について

Posted: 2006年9月25日(月) 17:34
by もうダメ
 次のような簡単なプログラムをRADツールを使って作ったとします。

Dim i As Long
For i=1 To 10000
   SetWindowText(GetDlgItem(hMainWnd,Static1),Str$(i))
Next
SetWindowText(GetDlgItem(hMainWnd,Static1),"終了")

 これを実行している最中に、一旦他のアプリケーション(例えばエクスプローラ)をアクティブにしたり、このプログラムのウィンドウを移動させたりすると、カウンタの表示が更新されなくなったり、ウィンドウが白くなったりするのを回避する方法はないでしょうか?
 ループが終了すれば、正常なウィンドウに戻ります。

 初心者なので、バカな質問をしているかもしれません。
 UpdateWindowやInvalidateRect, RedrawWindow, Sleep等を試してみましたがダメでした。せっかく作ったカウンタやプログレスバーが意味をなさず困っています。お助け下さい。

Posted: 2006年9月25日(月) 19:34
by konisi
別スレッドで動かす という方法があります。

コード: 全て選択

Dim flag As Long
Sub MainWnd_CommandButton1_Click()
	if flag=1 then Exit Sub
	flag=1
	CreateThread(ByVal 0,0,AddressOf(CountUp),0,0,0)
End Sub

Sub CountUp()
	Dim i As Long 
	For i=1 To 10000 
		SetWindowText(GetDlgItem(hMainWnd,Static1),Str$(i))
	Next 
	SetWindowText(GetDlgItem(hMainWnd,Static1),"終了")
	flag=0
End Sub

Windowの更新について

Posted: 2006年9月25日(月) 20:52
by もうダメ
 konisi様

 うまくいきました!感激!!
 
 いやぁ、勉強になります。とても助かりました。

 どうも有り難うございました。