Windowの更新について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
もうダメ

Windowの更新について

#1 投稿記事 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等を試してみましたがダメでした。せっかく作ったカウンタやプログレスバーが意味をなさず困っています。お助け下さい。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 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
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
もうダメ

Windowの更新について

#3 投稿記事 by もうダメ »

 konisi様

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

 どうも有り難うございました。
返信する