What is the difference between the new TFileOpenDialog and the old TOpenDialog?
In my computer (Win 7/DXE), when I run the code, the dialogs look the same.
What is the difference between the new TFileOpenDialog and the old TOpenDialog? In my
Share
TOpenDialogwraps the traditionalGetOpenFileName. It works on all versions of Windows.TFileOpenDialogwraps the new COM based dialog that was introduced in Vista. It therefore only works on Vista or later. It has more functionality than the older dialogs, most notably the tight integration with search.Vista common dialog

Compatibility common dialog

The
GetOpenFileNameAPI will in fact produce the new dialogs in most situations, if called correctly, so you can’t actually tell the difference. That said, historically the VCL’s wrapper forGetOpenFileNamewas implemented imprecisely and always resulted in the compatibility dialog being shown.But what does the new COM dialog have to offer then?
The new dialog offers a much easier customisation interface at the loss of some generality. If you use the old dialog template based customisation with
GetOpenFileNameon Vista or later then the dialogs degrade to ugly compatibility versions that lack functionality.The other big advantage of the new dialogs is the ability to select unlimited number of files. The old
GetOpenFileNameinterface returned multi-select filenames in a fixed size buffer. This can be a real limitation and in my own code I have had to hack the VCL code to make this buffer larger for when my app runs on XP.TOpenDialogwill delegate the work toTFileOpenDialogif possible. The test it uses requires all of the following to be true:Dialogs.UseLatestCommonDialogsglobal boolean variable is true (default is true). This allows you to disable the use of the new COM dialog should you elect to do so.OnIncludeItem,OnCloseandOnShowevents are all not assigned. Presumably these cannot be fired byTFileOpenDialog.Summary
If you continue to use
TOpenDialogthen you will reap the benefit of unlimited number of file in multi-select mode. However, if you wish to customise the dialog, and have the new dialogs rather than the ugly compatibilty dialogs, then you need to do the following:TOpenDialogand the dialog template method.TFileOpenDialogand implement customisation withIFileDialogCustomize.