おはようございます。
ちょっぴり、Delphiに慣れてきましたものです。
Windowsフォームの中にButtunを貼り付けてOn Clickイベントに
データベース処理を書いているのですが、
そのイベントの処理中にいつも『応答なし』とフォームのタイトルバーに表記されます。
最後まで処理は行うのですが、どうしてでしょうか。
もし、このような表記が出ないように出来るのであれば教えてください。
Delphi XE5 Enterprise
Windows 8.1 Pro 64bit
ORACLE 11g
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機能から除外するように指定する、ということになります。
通りすがりさん、ご回答ありがとうございました。
Application.ProcessMessagesを呼び出すことが解決しました。
助かりました。
Application.ProcessMessagesの呼び出しにはそれなりの副作用がありますので
用法・用量には十分お気をつけください。
ツイート | ![]() |