新しいTFileOpenDialogと古いTOpenDialogの違いは何ですか?
私のコンピューター(Win 7 / DXE)では、コードを実行すると、ダイアログは同じように見えます。
2 に答える
TOpenDialog
TFileOpenDialog
次の条件が満たされたときに実行されます。
- プログラムはVista(およびそれ以降)で実行されています
UseLatestCommonDialogs
true(これがデフォルトです)- いいえ
OnIncludeItem
、OnClose
またはOnShow
イベントが設定されています
そのため、システムで使用TOpenDialog
している間は、ほとんどの場合、自動的に実行TFileOpenDialog
される可能性があります。これが、同じように見える理由を説明しています。
備考:TFileOpenDialog
古いWindowsシステム(XP以下)ではフォールバックしません-例外が発生するだけです。反対に、TOpenDialog
ある種の「フォールフォワード」を行います。
TOpenDialog
従来のをラップしGetOpenFileName
ます。すべてのバージョンのWindowsで動作します。TFileOpenDialog
Vistaで導入された新しいCOMベースのダイアログをラップします。したがって、Vista以降でのみ機能します。古いダイアログよりも多くの機能があり、特に検索との緊密な統合が特徴です。
Vista共通ダイアログ
互換性共通ダイアログ
APIは、GetOpenFileName
正しく呼び出された場合、実際にはほとんどの状況で新しいダイアログを生成するため、実際に違いを区別することはできません。とは言うものの、歴史的にVCLのラッパーGetOpenFileName
は不正確に実装されており、常に互換性ダイアログが表示されていました。
しかし、新しいCOMダイアログは何を提供する必要がありますか?
新しいダイアログは、一般性を失うことなく、はるかに簡単なカスタマイズインターフェイスを提供します。GetOpenFileName
Vista以降で古いダイアログテンプレートベースのカスタマイズを使用すると、ダイアログは機能のない醜い互換性バージョンに低下します。
新しいダイアログのもう1つの大きな利点は、無制限の数のファイルを選択できることです。古いGetOpenFileName
インターフェースは、固定サイズのバッファーで複数選択のファイル名を返しました。これは実際の制限となる可能性があり、私自身のコードでは、アプリをXPで実行する場合に備えて、このバッファーを大きくするためにVCLコードをハックする必要がありました。
TOpenDialog
TFileOpenDialog
可能であれば作業を委任します。使用するテストでは、次のすべてが真である必要があります。
- WindowsVista以降で実行しています。
Dialogs.UseLatestCommonDialogs
グローバルブール変数はtrueです(デフォルトはtrue)。これにより、必要に応じて、新しいCOMダイアログの使用を無効にすることができます。- ダイアログテンプレートは指定されていません。
OnIncludeItem
、OnClose
およびOnShow
イベントはすべて割り当てられていません。おそらく、これらはによって起動することはできませんTFileOpenDialog
。
概要
引き続き使用するTOpenDialog
と、複数選択モードでファイル数に制限がないというメリットが得られます。ただし、ダイアログをカスタマイズし、醜い互換性のあるダイアログではなく新しいダイアログを使用する場合は、次の手順を実行する必要があります。
- XP
TOpenDialog
の使用とダイアログテンプレートメソッド。 - Vista以降では、を使用
TFileOpenDialog
してカスタマイズを使用および実装しIFileDialogCustomize
ます。