^ 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 multi threaded thumbnail mode (that supports much more formats than the default Windows dialog, supports EXIF thumbnails 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 PNG format
  • User interface styling system with 30 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
  • 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, 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



App 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 you need one of the licenses.


Requirements
  • Delphi (TOpen/SaveDialog compatible) component and C++ header included, VB, C# or any developer environment that supports the stdcall calling convention for using DLLs.
Mulitple dialogs are supported per .dll. If you want to use multiple dialogs just call the functions multiple times (preferably with the ofNotModal flag).


Installation
  • 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 click 'Ok'
  • 4. Repeat the above and this time add 'FilesystemDialogsPanel.pas'
  • 5. Save the package with a new name.
  • 6. 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 want 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 want, 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.


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.


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:
  • Amakrits
  • Amethyst Kamri
  • Aqua Graphite
  • Aqua Light Slate
  • Auric
  • Carbon
  • Charcoal Dark Slate
  • Cobalt XEMedia
  • Cyan Dusk
  • Cyan Night
  • Emerald Light Slate
  • Glossy
  • Golden Graphite
  • Iceberg Classico
  • Lavender Classico
  • Light
  • Luna
  • Metropolis UI Black
  • Metropolis UI Blue
  • Metropolis UI Dark
  • Metropolis UI Green
  • Obsidian
  • Ruby Graphite
  • Sapphire Kamri
  • Silver
  • Slate Classico
  • Smokey Quartz Kamri
  • TabletDark
  • Turquoise Gray

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'
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]