共同作業者は、長年にわたるより長い操作で進行状況を示すカスタムAVIを使用しています。常にうまく働いています。テーマが有効になっているWindows XP/VistaのTAnimateは動作しません
最近、デルファイ7からデルファイ2007に移行することを決めました。その一部は、彼のアプリケーションのテーマをサポートしています。 (最終的には、ほとんどの人がXPで動作していますが、すべてではありません)。アニメーションが機能しなくなりました。テーマを無効にすると、再び機能します。
TAnimateは、InitCommonControlsEx(ICC_ANIMATE_CLASS)を使用して作成されたWindowsアニメーションコントロールのラッパーです。 MSDNのドキュメントによれば、「ComCtl32.dllバージョン6を使用している場合、スレッドはサポートされていないため、アプリケーションがUIをブロックしないか、アニメーションが発生しないことを確認してください。明らかに、これは意図された動作です。
誰かがこの問題の回避策または代替方法の提案をしていますか?彼が進歩を示している処理は、別のスレッドを生成するのには適していないし、明らかにApplication.ProcessMessagesも良い解決策ではない。
EDIT:a)このトピックに関するRaymond Chenのブログ記事に「欠けているリンク」(言い訳)を提供していたため、この質問に対する正解をRob Kennedyに授与しています。別のスレッドに適切な答えでした。
ここの皮肉なこと:彼がTAnimateをブロックした操作は、使用しているデータベースエンジン(Advantage Database Server、またはADS)のインデックス作成操作でした。彼は私が問題を持って来たときに彼が言及しなかった。
ADSは、TAdsDataSet.AdsRegisterCallbackFunctionメソッドとTAdsDataSet.AdsClearCallbackFunctionメソッドを使用して進行コールバックをサポートします。コールバック関数には、現在の操作の進捗(パーセント)と、関数の戻り値を使用して操作を取り消す方法の両方が用意されています。だから、全体の疑問が疑わしいと分かります。コールバック関数を使用してプログレスバーを更新することができます。プログレスバーは、アプリがハングしていないことをユーザーに示します。
テーマを取得するには7から2007に移動しますか?私はすでにDelphi 7でテーマをサポートしていましたが –
私は「部分的に」言った。 D7は本当にテーマをサポートしていました。彼はただ気付かなかった。 (彼はちょっとラディーだ。) –