2

Delphi 7 で OLE オートメーションを使用して Word ドキュメントを開き、ロードして保存し、データベースにロードします。

これは正常に動作していますが、要件の一部は、OLE ビットが発生している間プログレス バーを表示することと、OLE 部分に時間がかかりすぎる場合のタイムアウトを設定することです。

問題は、OLE の実行中に GUI 全体がフリーズすることです。プログレスバーは何もせず、最後に急上昇します。

これにどのようにアプローチできるかについてのアイデアはありますか?

4

1 に答える 1

6

これをきれいに仕上げるのは難しいと思います。私の知る限り、Word の自動化では、実行時間の長いイベントをキャンセルする機会はありません。また、進行状況は通知されません。

おそらく最善の方法は、まずオートメーションを別のスレッドに移動することです。次に、実行時間の長い自動化が進行している間、マーキー プログレス バーを表示します。少なくとも、何かが起こっていることをユーザーに知らせます。

キャンセルに関する限り、進行状況ダイアログからユーザーにキャンセルさせてから、プログラムを続行させることができます。オートメーション スレッドを強制終了することもできますが、それでは Word が悪い状態のままになります。完了するまでそのままにしておきますが、結果は無視します。ユーザーの観点からは、これは、たとえ舞台裏で少し汚れていたとしても、あなたの目標を十分に達成するでしょう。

于 2013-03-05T09:51:39.367 に答える