作成したプログラムを実行すると途中で「応答なし」になります。
そこで何故かShowMessage関数を入れると平気になり不思議でしょうがありません。
それはコンピューターのバグなのでしょうか?
プロジェクトが作成できるので構文上は問題ないはずなのですが・・・
「応答なし」になりやすい構文の作り方、もしくはなりにくい方法ご存知の方が
いらっしゃるならば教えていただきたいです。よろしくお願いします。
どのようなプログラムを書いたのでしょうか?
コードを示して頂けると、回答がつきやすくなると思います。
ShowMessageを実行すると平気になる…。
そういうときはだいたい、"ShowMessageを表示すると処理がいったん止まる"ということが、
ポイントになっているとおもいます。
Kobさん、たかみちえさんありがとうございます。
コードは手元にないので今は示せません、申し訳ないです。
後日に示したいと思います。
ShowMessageの他に簡単に処理がいったん止まるものにはどのようなものが
あるのでしょうか?Labelに表示するというのは行っているのですが、当たり前にこれは効果がありません。
プログラムに影響しない程度のイベント、関数を行いたいのですが・・・
Label.Caption := 進捗状況表示
のあと、
Application.ProcessMessages;
を入れると良いです。
応答なしになるのは、何らかのループ処理が原因と思われます。
該当するループ処理に、同じようにProcessMessageを呼び出す処理を加えてみてください。
Application.ProcessMessages…今メッセージキューにあるメッセージを全部処理する
Sleep(API)…指定ミリ秒間、動作を停止させる
Wait(おんぷ村倉庫>Delphiユニット>stdFiles内関数)…指定ミリ秒間、ProcessMessagesだけの空ループを実行(http://TakamiChie.tripod.co.jp/)
こういうとき一番有効なのが、一番上のProcessMessagesです。
今たまっているメッセージを全部処理するので、何もないときは止まらないし、
あんまり動作に被害がありません。
メッセージキューについてはうちの旧学校、ProcessMessagesについては、
ヘルプやBorlandのサイト参照
はじめましてm(__)m
応答なしになりにくいPGという件ですが
Loop処理であれば
Doeventsを入れてみてはいかがでしょうか?
私の経験上、応答なしというのは
プログラムが停止していることよりも
Windowsからそのプログラムにメッセージを送っても
そのプログラムの作業に急がしすぎて答えるひまがない
ということが多かったです。
そこでいったんウインドウズに制御を渡すという
DoEventsを入れるといいと思います。
但しこれを多用すると処理速度が遅くなることもありますので
注意してください
DoEventsはVBですよ。
Delphiのそれに相当するものは、Application.ProcessMessagesです。
みなさんどうもありがとうございます。
ProcessMessageを試してみたいと思います。
たくさんのご解答ありがとうございました。
ツイート | ![]() |