44

新しいTFileOpenDialogと古いTOpenDialogの違いは何ですか?
私のコンピューター(Win 7 / DXE)では、コードを実行すると、ダイアログは同じように見えます。

4

2 に答える 2

49

TOpenDialogTFileOpenDialog次の条件が満たされたときに実行されます。

  1. プログラムはVista(およびそれ以降)で実行されています
  2. UseLatestCommonDialogstrue(これがデフォルトです)
  3. いいえOnIncludeItemOnCloseまたはOnShowイベントが設定されています

そのため、システムで使用TOpenDialogしている間は、ほとんどの場合、自動的に実行TFileOpenDialogされる可能性があります。これが、同じように見える理由を説明しています。

備考:TFileOpenDialog古いWindowsシステム(XP以下)ではフォールバックしません-例外が発生するだけです。反対に、TOpenDialogある種の「フォールフォワード」を行います。

于 2011-06-04T12:43:20.023 に答える
36
  • TOpenDialog従来のをラップしGetOpenFileNameます。すべてのバージョンのWindowsで動作します。
  • TFileOpenDialogVistaで導入された新しいCOMベースのダイアログをラップします。したがって、Vista以降でのみ機能します。古いダイアログよりも多くの機能があり、特に検索との緊密な統合が特徴です。

Vista共通ダイアログ Vista共通ダイアログ

互換性共通ダイアログ 互換性共通ダイアログ

APIは、GetOpenFileName正しく呼び出された場合、実際にはほとんどの状況で新しいダイアログを生成するため、実際に違いを区別することはできません。とは言うものの、歴史的にVCLのラッパーGetOpenFileNameは不正確に実装されており、常に互換性ダイアログが表示されていました。

しかし、新しいCOMダイアログは何を提供する必要がありますか?

新しいダイアログは、一般性を失うことなく、はるかに簡単なカスタマイズインターフェイスを提供します。GetOpenFileNameVista以降で古いダイアログテンプレートベースのカスタマイズを使用すると、ダイアログは機能のない醜い互換性バージョンに低下します。

新しいダイアログのもう1つの大きな利点は、無制限の数のファイルを選択できることです。古いGetOpenFileNameインターフェースは、固定サイズのバッファーで複数選択のファイル名を返しました。これは実際の制限となる可能性があり、私自身のコードでは、アプリをXPで実行する場合に備えて、このバッファーを大きくするためにVCLコードをハックする必要がありました。

TOpenDialogTFileOpenDialog可能であれば作業を委任します。使用するテストでは、次のすべてが真である必要があります。

  • WindowsVista以降で実行しています。
  • Dialogs.UseLatestCommonDialogsグローバルブール変数はtrueです(デフォルトはtrue)。これにより、必要に応じて、新しいCOMダイアログの使用を無効にすることができます。
  • ダイアログテンプレートは指定されていません。
  • OnIncludeItemOnCloseおよびOnShowイベントはすべて割り当てられていません。おそらく、これらはによって起動することはできませんTFileOpenDialog

概要

引き続き使用するTOpenDialogと、複数選択モードでファイル数に制限がないというメリットが得られます。ただし、ダイアログをカスタマイズし、醜い互換性のあるダイアログではなく新しいダイアログを使用する場合は、次の手順を実行する必要があります。

  • XPTOpenDialogの使用とダイアログテンプレートメソッド。
  • Vista以降では、を使用TFileOpenDialogしてカスタマイズを使用および実装しIFileDialogCustomizeます。
于 2011-06-04T12:41:04.387 に答える