[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/03/24(Thu) 14:29
投稿者名:名雪
Eメール:
URL :
タイトル:
処理中のフォーム移動と更新
宜しくお願いします。

VB6です。
フォームを利用して処理経過を表示しようとしているのですが、
処理中の時にフォームを移動させることができません。
移動させることができる様にできるでしょうか?

また、表示している内容(ラベル)の変更都度
フォームの状態を更新することができるのでしょうか?

投稿時間:2005/03/24(Thu) 15:43
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 処理中のフォーム移動と更新
> フォームを利用して処理経過を表示しようとしているのですが、
> 処理中の時にフォームを移動させることができません。
> 移動させることができる様にできるでしょうか?
適宜、処理をOSに返してやればできます。

> また、表示している内容(ラベル)の変更都度
> フォームの状態を更新することができるのでしょうか?
再描画すればできますが、わざわざ再描画処理をいれなくても、
最初の問題と同時に解決するでしょう。

投稿時間:2005/03/24(Thu) 17:39
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^2: 処理中のフォーム移動と更新
Say様
有難うございます。

> 適宜、処理をOSに返してやればできます。
DoEventsでよろしいのでしょうか?
DoEvents処理を挿入してもフォームを移動することができません。
「使用されている。」というメッセージが出てしまいます。


> 再描画すればできますが、わざわざ再描画処理をいれなくても、
> 最初の問題と同時に解決するでしょう。
こちらはフォームの設定ではできないんですね。
有難うございます。
再描画のメソッドは何になるのでしょうか?

宜しくお願いします。

投稿時間:2005/03/24(Thu) 21:15
投稿者名:Say
Eメール:
URL :
タイトル:
Re^3: 処理中のフォーム移動と更新
> > 適宜、処理をOSに返してやればできます。
> DoEventsでよろしいのでしょうか?
> DoEvents処理を挿入してもフォームを移動することができません。
> 「使用されている。」というメッセージが出てしまいます。
「適宜」、処理をOSに返してください。
処理にもよりますが、
時間のかかるループの中で返さなければ「適宜」返したことになりません。

投稿時間:2005/03/25(Fri) 09:08
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^4: 処理中のフォーム移動と更新
Say様
有難うございます。

> 「適宜」、処理をOSに返してください。

「適宜」とはフォーム自身に処理をかけた後ということで
よろしいでしょうか?

宜しくお願いします。

投稿時間:2005/03/24(Thu) 17:35
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 処理中のフォーム移動と更新
まだ、格闘中なら
hhttp://www.bcap.co.jp/hanafusa/VBHLP/sonota_kowaza.htm#prgzyun

投稿時間:2005/03/24(Thu) 17:50
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^2: 処理中のフォーム移動と更新
花ちゃん様
有難うございます。

> まだ、格闘中なら
> hhttp://www.bcap.co.jp/hanafusa/VBHLP/sonota_kowaza.htm#prgzyun

~~~~~~~~~~~~form.frm~~~~~~~~~~~~
Lavel1.Caption = "1/2 処理中"
DoEvents
処理関数1

Lavel2.Caption = "2/2 処理中"
DoEvents
処理関数2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
という風に作成しております。
処理関数1を実行している際の
表示には問題はないのですが
フォームの移動ができません。

この作成方法では無理なのでしょうか?

宜しくお願いします。

投稿時間:2005/03/24(Thu) 18:43
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 処理中のフォーム移動と更新
> 処理関数1
> 処理関数2

処理関数 の中に DoEvents が入っていますか?
処理関数は、どのような処理をしているのですか?

投稿時間:2005/03/25(Fri) 09:24
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^4: 処理中のフォーム移動と更新
花ちゃん様
有難うございます。

> 処理関数 の中に DoEvents が入っていますか?
いいえ、入れておりません。
また処理関数は標準モジュールの方に記述しております。


> 処理関数は、どのような処理をしているのですか?
処理関数1では
Open "" For Append As ""
を用いてテキスト出力をおこない。
処理関数2では
ExcelオブジェクトのメソッドOpenTextでテキストファイルを開き
罫線や背景色等の設定を行っております。

いろいろと試しまして
処理関数1の時はフォームを移動させることができましたが、
処理関数2の時は移動させることができる時と出来ない時があります。
(「アプリケーションが使用中です。」のメッセージはでなくなりました。)
また、処理関数1でフォームを掴んでいれば処理関数2に移った時でも移動することができますが
一度離しますとできる時と出来ない時があります。
これは仕方の無いことなのでしょうか?

宜しくお願いします。

投稿時間:2005/03/25(Fri) 09:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 処理中のフォーム移動と更新
> > 処理関数 の中に DoEvents が入っていますか?
> いいえ、入れておりません。

入っていなければ処理が終わるまでは他の処理が出来ません。

時間がかかっている処理は(ループ等)途中に DoEvents 等をいれないと
OSに制御を移せません。

従って関数が終わった時点では他の処理(フォームの移動)ができますが
関数を実行中は他の処理(フォームの移動)が出来ません。
Sayさんの回答もその事を言っておられるのです。

投稿時間:2005/03/25(Fri) 11:14
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^6: 処理中のフォーム移動と更新
花ちゃん様

> 時間がかかっている処理は(ループ等)途中に DoEvents 等をいれないと
> OSに制御を移せません。

長い(重い)処理を加えた後に入れる形ということですね。
ご回答有難うございました。

投稿時間:2005/03/25(Fri) 12:46
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re^7: 処理中のフォーム移動と更新
※横です(orz
> 長い(重い)処理を加えた後に入れる形ということですね。
> ご回答有難うございました。
「長い(重い)処理の合間にDoEvents()を入れる形」と表現したほうがいいかもw;

投稿時間:2005/03/25(Fri) 13:49
投稿者名:名雪
Eメール:
URL :
タイトル:
Re^8: 処理中のフォーム移動と更新
ガッ様、ダンボ様、花ちゃん様
有難うございます。

> > 長い(重い)処理を加えた後に入れる形ということですね。
> 「長い(重い)処理の合間にDoEvents()を入れる形」と表現したほうがいいかもw;

「長い(重い)」が不要だったと後で思いました。
何かしらの処理を加えたら DoEvents を呼ぶと言うふうに私は解釈しています。

投稿時間:2005/03/25(Fri) 14:16
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
処理中の...(注意事項)
> 何かしらの処理を加えたら DoEvents を呼ぶと言うふうに私は解釈しています。

間違った解釈をしないで下さいね。
なんでもかんでも DoEvents を使ったら良いと言う訳ではありません。
ガッ 03/25-14:01 No.2640  の例題を実行中に CPU の使用率を確認して
見て下さい。

又、逆に処理中に変な割り込みが入って処理がおかしくなる場合があります。
必要最小限度にし、且つ、割り込みが入っても問題ない場合にだけ使用する
ようにして下さい。

投稿時間:2005/03/25(Fri) 14:22
投稿者名:名雪
Eメール:
URL :
タイトル:
Re: 処理中の...(注意事項)
花ちゃん様
有難うございます。

> 又、逆に処理中に変な割り込みが入って処理がおかしくなる場合があります。
> 必要最小限度にし、且つ、割り込みが入っても問題ない場合にだけ使用する
> ようにして下さい。

ご指摘有難うございます。
注意して使用するようにします。

投稿時間:2005/03/25(Fri) 12:49
投稿者名:ダンボ
URL :
タイトル:
Re^7: 処理中のフォーム移動と更新
> 長い(重い)処理を加えた後に入れる形ということですね。

「加えた後に」の語句が気にかかる。「加えている最中」ならばOK。
余計な心配だったらすみません。

投稿時間:2005/03/25(Fri) 13:17
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: 処理中のフォーム移動と更新
> > 時間がかかっている処理は(ループ等)途中に DoEvents 等をいれないと
> > OSに制御を移せません。
>
> 長い(重い)処理を加えた後に入れる形ということですね。

まだ、理解されていないようなので。

たとえば、風呂に入ってる間もナイターが見たければテレビを風呂の中に持っていけば
見られますが、ドアの外に置いたのでは、風呂の中に入っている間はテレビは
見られませんよね。

テレビが DoEvents であり 見る行為がフォームの移動です。

投稿時間:2005/03/25(Fri) 14:01
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re^8: 処理中のフォーム移動と更新
> たとえば、風呂に入ってる間もナイターが見たければテレビを風呂の中に持っていけば
> 見られますが、ドアの外に置いたのでは、風呂の中に入っている間はテレビは
> 見られませんよね。
>
> テレビが DoEvents であり 見る行為がフォームの移動です。
(゜д゜<ぇと…この説明でいいの?
とりあえずコードを例示

'名雪さんの書いた、
'「何かしらの処理を加えたら DoEvents を呼ぶ」コード
t=Timer+100
Do
Loop While Timer<Timer
Doevents

'他の人が伝えたいコード
t=Timer+100
Do
    Doevents
Loop While Timer<Timer

※Timerは午前0時を過ぎると0にリセットされるので、
 このコードを日付が変わる100秒前以内に実行すると、永遠に終わらないと思われます。
 IDE環境ならCtrl+Breakでとまりますが(ぉ