『応答なし』について

解決


しんちゃん  2016-03-19 19:18:37  No: 48092

おはようございます。
ちょっぴり、Delphiに慣れてきましたものです。
Windowsフォームの中にButtunを貼り付けてOn Clickイベントに
データベース処理を書いているのですが、
そのイベントの処理中にいつも『応答なし』とフォームのタイトルバーに表記されます。
最後まで処理は行うのですが、どうしてでしょうか。
もし、このような表記が出ないように出来るのであれば教えてください。

Delphi XE5 Enterprise
Windows 8.1 Pro 64bit
ORACLE 11g


通りすがり  2016-03-19 21:47:22  No: 48093

Windowsではアプリケーションが5秒以上メッセージループを回さないと応答なしという判定が行われます。
おそらくデータベース関係などで時間がかかる処理を行っているのではないですか?

これを回避するには、(1)5秒以内にメッセージ処理を行う、(2)ゴーストウィンドウの適用を行わないようにする、
の2つの方法があります。(1)のほうは要所要所でApplication.ProcessMessagesを呼び出すとか、処理そのものを
別スレッドで(TThread.CreateAnonymousThreadとかTTaskを使って)行う、ということになります。また(2)のほうは
Windowsに対して自プロセスを

DisableProcessWindowsGhosting function (Windows)
https://msdn.microsoft.com/en-us/library/ms648415.aspx

でwindow ghosting機能から除外するように指定する、ということになります。


しんちゃん  2016-03-22 18:48:39  No: 48094

通りすがりさん、ご回答ありがとうございました。
Application.ProcessMessagesを呼び出すことが解決しました。
助かりました。


通りすがり  2016-03-23 07:28:37  No: 48095

Application.ProcessMessagesの呼び出しにはそれなりの副作用がありますので
用法・用量には十分お気をつけください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加