0

Windows 8 で Delphi XE2 を使用しています。D2009 アプリケーションを XE2 に移植したところ、突然、保存ダイアログ (TSaveDialog) が非常に遅くなりました。

Project/Options/Application/Runtime Themes が Enable Runtime Themes に設定されている場合:

=>

保存ダイアログを開くと、ウィンドウが約 1 分間フリーズします (ウィンドウを閉じても、ダイアログ (または別の TOpenDialog) を再度開くまで約 1 分間待たなければならないことがあります)。新しい Vista スタイルの保存ダイアログが表示されます。

Windows 7 を搭載した PC でこの exe を実行しようとすると、起動時にアプリがハングします (XP 互換モードでも試しましたが成功しませんでした)。

Project/Options/Application/Runtime Themes が none に設定されている場合:

=>

保存ダイアログは適切に (高速に) 動作しますが、古いスタイルのダイアログが表示されます。以下の例を参照してください。

古いスタイルのダイアログの例

この exe は、Windows 7 を搭載した PC で適切に動作します (ただし、古いスタイルのダイアログを使用します)。

Ps。Win 7 PC で D2009 を使用してコンパイルした私の古い exe ファイルは、Win 7 と 8 の両方の PC で正常に動作し、新しい Vista ダイアログ スタイルを使用してダイアログを正しく表示します。

これを引き起こしているのは、Win 8/7 のいくつかの権限でしょうか? IDE FIX PACK 5.4 を使用しています。

ありがとう、トーマス

4

1 に答える 1

0

私は問題が何であるかを見つけました。{$MAXSTACKSIZE $4000000} を使用すると、保存ダイアログが約 1 分間フリーズします。この大きなスタック サイズの理由は、再帰アルゴリズムを使用しているためです (おそらく再作成する必要があります)。

次のように再現します (XE2):

  1. 新しい VCL フォーム アプリケーションを作成する
  2. フォームに TSaveDialog1 を配置します
  3. OnClick イベントで Tbutton を配置する

`

Begin
   if SaveDialog1.Execute then    
     MessageDlg('ok', mtInformation,[mbOk], 0);
end;

`

4: プロジェクト ソース ファイルを開き、次の行を挿入します。

//{$MAXSTACKSIZE $3500000} //これは 5 の 10 進数値です 5574 528 OK!

{$MAXSTACKSIZE $4000000} //これは 6 の 10 進数値です 7108 864 Not OK!

実行してボタンをクリックします。ダミーのファイル名を付けて保存を押します。何も起こりません。ボタンを 60 秒間クリックし続けます。対話は最後に閉じられます。

小さい方のスタック サイズ $3500000 に変更します。これで、プログラムはうまく機能します。すべてのヒントをありがとう。

于 2013-12-20T10:17:25.753 に答える