^ What's the point?
^ Features
^ Installation
^ Supported file formats
^ Settings
^ Keyboard shortcuts
^ Useful information

more snapshots...

Download :: Topics on this subject on the Forum :: Top
Filesystem Dialogs Library

Filesystem Dialogs Library is a vastly enhanced, unique animated file dialog (file and folder browser component) for use in Win32 and Win64 (Vista/7/8/10) software aimed for highest quality. It's 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 powerfull 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 included.
If you like this library, see the Vanga Rengi Mangaro Project, which is a project to patch every process to use Filesystem Dialogs dialogs instead of the default Windows dialogs.

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 then the default Windows dialog, supports EXIF thumbnails and displays audio files' sample waveform too (optionaly 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)
  • Has a recent document list on a per-application basis
  • 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 style system with 30 built-in style themes and custom styling support
  • User interface DPI scaling fully supported
  • Hide particular UI elements and customize the dialog appearance if needed
  • Automatically decodes URL encoded file names and underscores (eg.: "Man%20on%20the_Mars.jpg" -> "Man on the Mars.jpg") and false characters
  • 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



Compatibility
  • Windows XP (works, but not officially supported any more)
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 10

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 smooth 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 it's tutorial).

  • Other language developers see the "FilesystemDialogsDynamic.pas" source for the simple structures (two needed) that can be converted to your 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 wanted 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 wanted 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 usefull 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 Windows standard 'File description' 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 becouse 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 a thread, so things that apply for threads in general, applies here too.


Using the custom previewer option

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 manualy 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 manualy, 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;


Using xVideo

If Filesystem Dialogs finds xVideo.dll (LoadLibrary() results True) video preview (playback) is available. Note that using xVideo (for freeware or) in commercial applications requires a license, avalable from: http://surodev.com/
xVideo will display a message if it's not registered. To avoid this dialog you must load xVideo first (with LoadLibrary()) and call it's xVideo_Register() function with your registration information before loading FilesystemDialogs.dll.

Note that without registration the message will pop up when using the secondary viewer for video files. To dialog is not visible but you have to press Enter or the Esc key to continue.


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, usefull for identifying a particular dialog.


Note

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


Drawbacks
  • Subclassing used for comdlg32.dll's dialogs will not work

Requirements
  • Delphi (TOpen/SaveDialog compatible) component and C++ header included, VB, C# or any developer environment that supports the stdcall calling convention.

Filesystem Dialogs Library in shareware and commercial software?

The component is free for use in free software. If you like it and want to use it in a (shareware or) commercial product you need one of the licenses.


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

Settings
  • Automatically go into folders after creating them
    Go into folders after creating them. Quite a reasonable event. You can disable it for backward compatibility though.

  • Milisecond precise time display
    Timestamp will display ms (milliseconds) too.

  • Display Artist - Title in Description field for ID3 Tag-ed files
    Display ID3 data in the Description field. First ID3v2 is checked if non existent, falls back to ID3v1. This does take longer time to update the list though.
    Formats checked: .MP1 .MP2 .MP3 .MP4 .M4A .WAV .MPC .AAC .APE .VQF .FLAC

  • Disable tree view until first use (greatly increases performance)
    The tree-view won't be refreshed/updated until the first use (clicking on it etc.) this results about twice the speed when changing folders.

  • Always use last used folder (per app.)
    Always use last used folder when the dialog pops up. That is from where you last browsed for files.

  • Remember only one dialog setting and use it for every application
    Only one dialog appeareance will be used for every application. That is: the new dialog will be opened at the same place and will use the same settings where you last left it.

  • Save settings on "Cancel" too, not only on "Open" and "Save"
    Save dialog's settings (column layout, filters, view mode etc.) every time the window is closed, not only when an "OK" type button or event is commited, but on "Cancel" or when the user simpli closes the window with the close button (X) too.

  • Show Scrollbars on Recent Folders List and Drives and Favorites List
    You should use an app. like Wheeler to gain control over the lister with the mouse wheel.

  • Font for Lister
    Select a font for lister display. User's preference.
    Warning: Draging is a bit broken with another font!

  • Recent folders to remember
    Number of visited folders to remember.

  • Don't display file extensions
    Only for those who don't like seeing the .jpg extension.

  • When saving files force extension case to
    Force extension case to lower or upper case. Select for convinience.
    Upper case: Pic.Jpg -> Pic.JPG
    Lower case: Pic.Jpg -> Pic.jpg

  • Display file extensions converted too
    Display file extensions converted to the selected case.

  • Use Lanczos filter for thumbnails (slow filter but gives highest quality)
    Using Lanczos filter will result the highest, most crisp quality for the generated images, but will take more time to generate the thumbnails. Recommended though. Without Use Lanczos filter for thumbnails checked the most simple and fastest linear mode is used which results pixely thumbnails. But is much more faster though.

  • Generate thumbnails for folders which contain pictures
    Little thumbnails will be generated and shown on top of folder icons in thumbnail mode, so you can see the first pictures inside the folder.

  • Generate thumbnails for recognised audio files
    Unique feature, only available with BASS. If BASS library is found in the process space and is in an initialized state, thumbnails will be generated from all audio files supported by BASS (and it's plugins). Very usefull feature for applications dealing with sound and audio files.
    Note that you still get thumbnails for audio files even without BASS, if they are Taged with ID3v2 and contain sample cache (SESC frame).

  • Save SESC (cache for sample graphics) into ID3v2 (+0.35% file size)
    Save the "thumbnail graphics" data into the file, in an ID3v2 Tag. This sample cache is very small, it's about 0.35% size of the file (for example: ~30KB for an ordinary MP3 file), and the next time when a thumbnail is needed for the audio file this cache will be used which means no sampling is needed, which means nearly instant thumbnail display (this is even faster then generating a thumbnail for a picture file).

  • Cache the thumbnails (~1MB on every ~100MB)
    Save the thumbnail cache (inside Thumbs Filesystem Dialogs.db in every folder) and obtain instantenous loading of non audio thumbnails.

  • Zoom small images x2
    Will magnify small images two times (to the double), that can fit with this double size into the thumbnail. This is the opposite what should happen as the thumbnails are about creating small pictures.

  • Center folder names on folder thumbnails (else aligned to the left)
    Folder names will be centered on folder thumbnails (recommended as it is more perspicuous), if you uncheck this, the text is aligned to the left.
You can use the above text in your application's documentation, if you want.


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.
  • Wheeler - A free program that enhances the behavior of your mouse wheel.
  • 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]