^ What's the point?
^ Features
^ License types
^ Installation
^ Supported file formats
^ Changing settings
^ Custom file information
^ Custom thumbnails
^ Custom previewer
^ Using ofIntegrate mode
^ On select file name
^ Keyboard shortcuts
^ Using styles
^ User interface DPI scaling
^ Extra parameters
^ COM class wrapper
^ Useful information


more snapshots...

Download :: Top
Filesystem Dialogs Library

Filesystem Dialogs Library is a unique, optionally animated, file dialog (file and folder browser component) for use in Win32 and Win64 (7/8/10/11) software aimed for highest quality. Its purpose is to provide the most powerful user-friendly file and folder selection options and file managament tools for the session and highest image quality in thumbnail and previewer mode. It has a powerful integration option to integrate the dialogs into your application's window as a file or folder browser. It has a previewer on secondary display for multi-monitor setups and support for very easy custom thumbnail and previewer implementation.
Filesystem Dialogs is ideal for audio, picture and multimedia related applications.
Delphi and VC++ example and an experimental COM class wrapper DLL is included.

Features
  • Unique animated file and folder lister mode (animation customizable in settings)
  • All window/column position/size & sorting settings are saved for every application or the user can choose to always use a favorite dialog settings
  • Has a very hiqh quality blazingly fast multi threaded thumbnail mode (that supports much more formats than the default Windows dialog and displays audio files' sample waveform too (optionally cached)
  • Drag & drop for files/folders support
  • If bass.dll is found (2.3 or 2.4 is supported) thumbnails are generated from all audio files (all file formats that BASS supports, or there is plugin loaded for BASS for the particular format - see http://www.un4seen.com/bass.html for details)
  • Implements an enhanced folder selector dialog
  • Has option to cache the thumbnails on a per folder basis in highest quality lossless format
  • User interface styling system with 35 built-in style themes and custom styling support
  • User interface DPI scaling is fully supported
  • Hide particular UI elements and customize the dialog appearance if needed
  • Has a customizable favorite folders and a recent folder list
  • File viewer (previewer) for pictures, audio and video
  • Powerful secondary display previewer mode - for multiple display setups, browse the file system on one display and preview the supported files in full screen on a secondary display
  • Animated GIF files are played in real-time within the thumbnails and also supported in the previewers
  • Option to call the dialogs not modally, but like an ordinary form (ideal for multi monitor applications and this is the prefered way also)
  • Option to integrate the dialog into a parent handle into your application and trigger an event on file selection, etc., use the library as a file system browser component in your application
  • Option to display custom file information, file thumbnail and preview for files with a callback function - generate thumbnail and implement a previewer for any file type needed by your app.
  • Full unicode file name support


Application examples that use Filesystem Dialogs in integrated mode

     

     


Compatibility
  • Windows 7
  • Windows 8
  • Windows 10
  • Windows 11

Filesystem Dialogs Library in shareware and commercial software?

The component can be evaluated freely. If you like it and decide to use it in a freeware, shareware or commercial (or any other money making - advertising, in app. selling, etc.) product one of the licenses is needed.


Requirements

For the library to function you'll have to copy 'FilesystemDialogs.dll', 'FreeImage.dll' and 'MediaInfo.dll' into the same directory as the EXEs; in case of the Win64 version 'vcomp140.dll' too.
Optionaly 'bass.dll', it is automatically detected and used if found, but it is not explicitly needed. 'bass.dll' adds audio playback support and creation of audio thumbnails.
'FreeImage.dll' is explicitly needed for thumbnailing and previewer, "MediaInfo.dll' is explicitly needed for display of media file's audio and video properties.
'WebView2Loader.dll' is needed for Edge web browser support, else no browser is displayed (eg. no PDF file preview). Not sure if Edge option works on Windows 7 though, at least Windows 10 is recommended.

The VC++ example needs to be compiled before you can try it. The included C++ example app. does not have an XP style manifest file. To have the dialogs in XP style, please add an XP style manifest to your project.

Mulitple dialogs are supported per .dll. If you want to use multiple dialogs just call the functions multiple times (with the 'ofNotModal' flag).


Installation
Install a desired package from the 'Packages' folder.

Or to create a new package from scratch:
  • Unpack the Filesystem Dialogs package ("Filesystem Dialogs x.x.x.zip").
  • 1. In Delphi menu: File/New/Package Delphi
  • 2. In project manager (in the upper-right corner by default), right-click on 'Package1.dproj' and select 'Add...'
  • 3. Unit file name: click 'Browse' and select 'FilesystemDialogsDefs.pas' and 'FilesystemDialogsPanel.pas' then click 'Ok'
  • 4. Save the package with a new name.
  • 5. In project manager (in the upper-right corner by default), right-click on 'Package1.dproj' (the name as saved) and select 'Install...'
If everything went smoothly you can access Filesystem Dialogs's dialog components on 3delite's tab.

If you want to use the full power of Filesystem Dialogs use the own interface and dynamic loading of the .dll (see FilesystemDialogsDynamic.pas and its tutorial).

  • Other language developers see the "FilesystemDialogsDynamic.pas" or "FilesystemDialogsDefs.h" source for the simple structures (two needed) that can be converted to the needed language.

Pre-configuring the dialog for a fresh install

When opening the dialogs for the first time default values are used. If you wish to customize the dialogs, you can set the needed registry values prior opening it for the first time. Global settings are in:
HKEY_CURRENT_USER \ Software \ 3delite \ Filesystem Dialogs

If you want to customize your dialog you have to specify a GUID value when invoking it by code. Then before invoking the dialog set the registry values for the needed GUID (for example): HKEY_CURRENT_USER \ Software \ 3delite \ Filesystem Dialogs \ App settings \ {00000000-0000-0000-0000-000000000001}

For example, using the thumbnail mode as the default when invoking the dialog for the first time:
'HKEY_CURRENT_USER \ Software \ 3delite \ Filesystem Dialogs \ App settings \ {00000000-0000-0000-0000-000000000001} \ Thumbnail mode' (REG_DWORD) set to 1

For getting the optional values available, open a dialog, set everything as you wish, then close the dialog with selecting a file and clicking 'Open', the values will be saved in the registry. Open a registry editor (for example regedit.exe) and see the set values in the above given branch. The options and values are quite self-explanatory.

Example code to turn on thumbnail mode for a dialog:

Uses FilesystemDialogsDefs;

procedure CheckAndSetThumbnailMode(FilesystemDialog: TFilesystemDialog);

    procedure SaveSettingsRegKey(KeyName: String);
    var
        Reg: TRegistry;
    begin
        if RuningOn64BitOS then begin
            Reg := TRegistry.Create(KEY_WOW64_64KEY OR KEY_ALL_ACCESS);
        end else begin
            Reg := TRegistry.Create;
        end;
        try
            Reg.RootKey := HKEY_CURRENT_USER;
            if NOT Reg.KeyExists(KeyName) then begin
                Reg.OpenKey(KeyName, True);
                Reg.WriteBool('Thumbnail mode', True);
            end;
        finally
            Reg.CloseKey;
            Reg.Free;
        end;
    end;

begin
    SaveSettingsRegKey(STR_REG_FD_SETTINGS + '\' + STR_REG_FD_DIALOG_SETTINGS + '\' + FilesystemDialog.DialogGUID);
end;

Changing the settings on the fly

When using Filesystem Dialogs in 'ofIntegrate' mode it can be useful to change settings on the fly.
Adjust the registry settings and then send a FDM_NAME_SETTINGS_CHANGED (defined in FilesystemDialogsDefs.pas) message to the dialog handle (or register the window message with RegisterWindowMessage('Filesystem Dialogs Settings Changed') and use SendMessage/PostMessage to update the settings).


Using Filesystem Dialogs with a BASS using app.

If you want to display audio thumbnails for more file types load the BASS format plugin and set the "Audio File Types" registry key.

For example to add WavPack file format:

'HKEY_CURRENT_USER \ Software \ 3delite \ Filesystem Dialogs \ Audio file extension types' (REG_SZ) set to: [Default types already specified] + ", WV"

Filesystem Dialogs will try to create a BASS channel for all .wv extension files and creating audio thumbnails for them and also support playing them.


Using the custom file information option

Optionally the 'Details' column can be customized to display custom information for every file.
Add the 'ofCustomFileInfo' flag to the open/save function and also assign a callback function to the structure and specify a column name to display.
Filesystem Dialogs will call the callback function giving it the full file name to the function. The callback function then can give back to Filesystem Dialogs a customized unicode string (max. 256 characters long) to display any information.
The custom information will be also visible in thumbnail mode in the balloon hint.
The callback should be as fast as possible because it affects how fast the list is updated.


Using the custom thumbnail option

With the FileThumbnailHookProc() callback function customized thumbnails can be used to display custom thumbnail for every file and folder.
Add the 'ofCustomThumbnail' flag to the open/save function and also assign your callback to 'FileThumbnailHookProc' for the open/save function if it is not nil it will be called.
Filesystem Dialogs will call the callback function giving it the full file/folder name to the function. The callback function then can give back to Filesystem Dialogs a customized thumbnail.
The returned HBitmap handle should be 32bit with alpha channel (transparent background if smaller in dimensions).
Return 'False' if no thumbnail is generated, Filesystem Dialogs will create one.
The callback should be as fast as possible because it affects how fast the list is updated.
This callback is called from within threads, so things that apply for threads in general, applies here too.

For example, if the host app. is a 3D app. it's possible to create a thumbnail preview of the 3D object from the file for every file displayed as the thumbnail.


Using the custom previewer

Custom previewer is supported for both the integrated previewer and for the secondary display viewer too.
To enable custom previewer add the 'ofCustomPreViewer' flag to the open/save function and also assign your OFNHookProc() function.
On previewer event the OFNHookProc() is called with Wnd = PanelCustomViewer.Handle, Msg = FDM_PREVIEWER_CUSTOM_QUERY, FileName = PChar (unicode), ItemPIDL = PItemIDList. Return a non-zero value if the custom previewer can display this file.
If the file is displayable (the above function returned a non-zero value) the OFNHookProc() is called with Wnd = PanelCustomViewer.Handle, Msg = FDM_PREVIEWER_CUSTOM_DISPLAY, FileName = PChar (unicode), ItemPIDL = PItemIDList. Use the 'Wnd' with WinAPI SetParent() to integrate your custom previewer into the window and return a non-zero value if the custom previewer displayed this file.
On previewer close the OFNHookProc() is called with Wnd = PanelCustomViewer.Handle, Msg = FDM_PREVIEWER_CUSTOM_CLOSE, wParam = 0, lParam = 0, close (free the custom previewer).
The FDM_PREVIEWER_CUSTOM_CLOSE is not called when switching between files! So you should re-use the window if it is already open.
When the previewer panel is resized OFNHookProc() is called with Wnd = PanelCustomViewer.Handle, Msg = FDM_PREVIEWER_CUSTOM_RESIZED, wParam = new width, lParam = new height, resize, realign the custom previewer display on this event.

For example, if the host app. is a 3D app. it's possible to create a viewer for the 3D objects, eg. rotate the object in 3D with the mouse inside the viewer.


Using ofIntegrate mode

When using 'ofIntegrate' mode cursor (arrow) key presses needs to be processed manually because focus returns to parent window for some reason.
When receiving WM_KEYDOWN messages for VK_UP, VK_DOWN, VK_LEFT or VK_RIGHT, store the currently focused control handle, send the WM_KEYDOWN message to this control handle manually, then re-set the focus for this handle and consider the WM_KEYDOWN message handled.
In Delphi add a 'TApplicationEvents' component to the form and implement the OnMessage() event like this:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
    FocusedHandle: HWND;
begin
    //* Workaround for ofIntegrate mode (focus returns to parent window with cursor keys, so re-set focused control in case)
    if Msg.message = WM_KEYDOWN then begin
        if (Msg.wParam = VK_UP)
        OR (Msg.wParam = VK_DOWN)
        OR (Msg.wParam = VK_LEFT)
        OR (Msg.wParam = VK_RIGHT)
        then begin
            FocusedHandle := GetFocus;
            SendMessage(FocusedHandle, WM_KEYDOWN, Msg.wParam, Msg.lParam);
            Windows.SetFocus(FocusedHandle);
            Handled := True;
        end;
     end;
end;


FDM_ON_SELECT_FILE_NAME

If flag 'ofOnSelectFilename' is specified when opening the dialog, when the user clicks on a file (not double-click, just selects a file) a 'FDM_ON_SELECT_FILE_NAME' message is sent to the Handle and/or HookProc, with WPARAM = pointer to a 'TOpenDialogOnSelectFileName' record, and pointer to your 'TOpenDialogParams' record in LPARAM that was used to invoke the dialog. If 'User' was specified in 'TOpenDialogParams.User' you get it back here, useful for identifying a particular dialog.


Supported thumbnail and viewer file formats

Pictures:
  • JPG images (*.jpg, *.jpeg)
  • JPEG2000 images (*.jp2, *.j2k, *.jpc)
  • TIFF images (*.tif, *.tiff) (You need a license to use the LZW compressed format)
  • GFI fax images (*.fax)
  • SGI images (*.bw, *.rgb, *.rgba, *.sgi)
  • Autodesk images files (*.cel, *.pic) old style only
  • Truevision images (*.tga, *.vst, *.icb, *.vda, *.win)
  • ZSoft Paintbrush images (*.pcx, *.pcc)
  • Word 5.x screen capture files (*.scr)
  • Kodak Photo-CD images (*.pcd)
  • Portable pixel/gray map images (*.ppm, *.pgm, *.pbm)
  • Dr. Halo images (*.cut, *.pal)
  • CompuServe images (*.gif)
  • SGI Wavefront images (*.rla, *.rpf)
  • Standard Windows bitmap images (*.bmp, *.rle, *.dib),
  • Photoshop images (*.psd, *.pdd)
  • Paintshop Pro images (*.psp)
  • Portable network graphic images (*.png)
  • Amiga (*.iff, *.lbm)
  • DirectDraw Surface (*.dds)
  • Raw Fax format CCITT G3 (*.g3)
  • High Dynamic Range (*.hdr)
  • JPEG Network Graphics (*.jng)
  • Commodore 64 Koala format (*.koa)
  • Multiple Network Graphics (*.mng)
  • Sun Rasterfile (*.ras)
  • Truevision Targa files (*.tga, *.targa)
  • Wireless Bitmap (*.wbmp)
  • X11 Bitmap Format (*.xbm)
  • X11 Pixmap Format (*.xpm)
See the homepage for all the supported files.


Audios:
  • Audio file tags are read (tags/cover art): ID3v1, ID3v2, Lyrics3, APEv1, APEv2, Flac (including Ogg Flac), Ogg Vorbis, Opus, MP4 (including video files and 64bit atom size files), WAV LIST INFO, BEXT and CART (including RF64 WAV files) and WMA
  • Furthermore if bass.dll is found in the process space or in the file system path, audio sample thumbnails are generated for all audio files that BASS can open (all the file formats that BASS supports or there is a BASS plugin loaded for the particular format).

Webpages:
  • HTML files (*.html, *.htm, *.mht)
  • URL files (links) (*.url)
  • Flash files (*.swf)

Text:
  • Text files (*.txt, *.text, *.log, *.ini, *.cfg, *.pas, *.cpp, *.h, *.bas) - configurable in settings

Keyboard shortcuts
  • F1: Online help (this page)
  • F3: Viewer on/off
  • F7: Create new folder
  • Esc: Close the dialog & cancel
  • Ctrl + A: Select all
When navigating in the lister:

  • F2: Rename selected item
  • Left arrow: Up one folder
  • Right arrow: If on folder go into it
  • Up arrow: Navigate on the list up and wraps down if reaches top
  • Down arrow: Navigate on the list down and wraps up if reaches bottom
  • Any character: The usual quick jump to the file name beggining with that letter
  • Ctrl + D: Copy selected file name to the clipboard

While pre-viewing:

  • Left mouse button: Hold down and drag image
  • Middle mouse button: Reset all view
  • Mouse wheel: Zoom in and zoom out
  • Right mouse button: Full context menu for the file
  • PageUp: Previous file
  • PageDown: Advance to the next file

Secondary full-screen viewer:

  • Esc: Close
  • Space: Audio Play/Pause

Using styles

To use a style assign a 'TOpenDialogParams.Appearance' struct and set 'VCLStyleTheme'. This can be a built-in style (specify one of the strings below) or an external file name to a .vsf file (for example 'C:\Carbon.vsf').

Built-in styles:
  • Windows
  • Amakrits
  • Amethyst Kamri
  • Aqua Graphite
  • Aqua Light Slate
  • Auric
  • Carbon
  • Charcoal Dark Slate
  • Cobalt XEMedia
  • Cyan Dusk
  • Cyan Night
  • Emerald Light Slate
  • Glossy
  • Glow
  • Golden Graphite
  • Iceberg Classico
  • Lavender Classico
  • Light
  • Luna
  • Obsidian
  • Onyx Blue
  • Ruby Graphite
  • Sapphire Kamri
  • Silver
  • Sky
  • Slate Classico
  • Smokey Quartz Kamri
  • Tablet Dark
  • Tablet Light
  • Turquoise Gray
  • Windows10
  • Windows10 Blue
  • Windows10 Dark
  • Windows10 Green
  • Windows10 Purple
  • Windows10 SlateGray

User interface DPI scaling

You have to call 'SetProcessDPIAware' in your app. BEFORE creating any window for Filesystem Dialogs, but AFTER loading the FilesystemDialogs.dll for the library to function properly on higher DPI systems.
By default the Windows' DPI settings are used. To explicitly set a custom scaling value use the 'AdditionalParameters' variable (unicode string list separated by a newline #13#10), for example 200% (no scaling, 100% value is 96):
    TOpenDialogParams.AdditionalParameters := PChar('UIDPIScaling=192');


Extra parameters

Supported extra parameters that override the default settings (unicode string list separated by a newline #13#10):
  • 'UIDPIScaling'
  • 'ThumbnailsWidth'
  • 'ThumbnailsHeight'
  • 'OpenButtonCaption'
  • 'OpenAllButtonCaption'
Example:
    TOpenDialogParams.AdditionalParameters := PChar('UIDPIScaling=192' + #13#10 + 'ThumbnailsWidth=260' + #13#10 + 'ThumbnailsHeight=200');
Note that 'ThumbnailsWidth' and 'ThumbnailsHeight' value is multiplied with the UI DPI scaling factor.

Contact me if you need some specific parameters (3delite@3delite.hu).


COM class wrapper

After registering the COM class DLLs, use 'FilesystemDialogs.TFilesystemDialog' id to create a COM class instance.


Useful Programs that work well together with Filesystem Dialogs
  • BASS - Audio library. If Filesystem Dialogs finds one it will make use of it.
  • Free Image Library - If FreeImage.dll is found in the process space or in the file system path, additional formats are available, - also there is a twice chance that special non-ordinary formats are recognised too.
  • Hard Disk Sentinel - A hard disk monitoring application to find possible hard disk problems, performance degradations and failures. It can alert if a problem detected or if temperature is too high and it has other reporting options.
  • XnView Shell Extension - Is a graphic file option extension for windows explorer.

Useful information

[Top]