Skip over navigation

Shell Folders Unit

Browse for Folder dialogue box & other Windows shell folder handlog code

Version 2.3.2
Released 11 Jan 2014
Platforms Win32 & Win64
Framework VCL
Compatibilty Delphi 7 and later


This unit provides various components, classes and routines for handling Windows shell folders. Included are:

A component that encapsulates the Windows Browse for Folder dialogue box. This component, which provides a wrapper round theWindows API SHBrowseForFolder function, permits a degree of customisation of the dialogue box.
A component that provides information about a specified special shell folder. Information is extracted from the Windows SHGetSpecialFolderLocation function and is presented in a usable form via the component's properties.
A class that enumerates all the special shell folders (implements IPJSpecialFolderEnum below).
An interface to an object that enumerates all the special shell folders.
Support routines
Various routines are provided that can manipulate special shell folder identifier information and extract display name and path information from PIDLs.
CSIDL_ Constants
Various CSIDL_ constants that are not provided by all versions of Delphi are declared. These identify all known special folders or are flags that can be combined with special folder ids. MSDN provides information about these constants.
Property Editor
A separate design time unit contains a property editor for special shell folder identifiers. This property editor enables the object inspector to display shell folder constant names for relevant properties.

Features of TPJBrowseDialog include:

  • The dialogue's OK button can be enabled or disabled according to the currently selected folder.
  • Status text that changes with the currently selected folder can be displayed. This is done by setting an option and handling the OnSelChange or OnSelChangeEx events.
  • The PIDL of the currently selected folder is made available via the OnSelChangeEx event.
  • Virtual and file system folders can be displayed. The display can also be limited to file system folders only.
  • A help button can be included in the dialogue box that is automatically disabled if the component's HelpContext or HelpKeyword properties are null. An OnHelp event can be used to customise help handling.
  • The dialogue box can be customised by handling the OnInitialise event.
  • The "New style" of Browse for Folder dialogue box can be displayed by setting an option. Such a dialogue box is resizeable and can display a Make New Folder button. Status text and the Help button cannot be displayed in the new style dialogue box.
  • Hints on using the dialogue box can be displayed.
  • An edit control in which folder names can be entered can be displayed and actions taken when invalid folders are entered can be customised.

A demo program is provided. It lists and provides information about all the special shell folders supported by the unit. A read-me file is included with the demo that explains further.

Get The Code

You can download the latest version of the Shell Folders Unit directly from SourceForge as

Download v2.3.2

Shell Folders Unit is a sub-project of the DDabLib project which is maintained in a Subversion repository. The code is developed in the trunk/projects/shellfolders branch.

Subversion users can check out the source code of the current release from the repository on SourceForge by doing:

svn checkout codedir

where codedir is the directory where you want to checkout code. To check out other versions, simply specify a different version number.

The latest development tree can be checked out using:

 svn checkout codedir

Check outs are read only, but you can easily contribute code: see Feedback & Queries below.


The Shell Folders Unit, its property editor, documentation and demo program are supplied in a zip file. Before installing you need to extract all the files from the zip file, preserving the directory structure. The following files will be extracted:

  • PJShellFolders.pas – classes, routines, constants and component source code.
  • PJShellFolders.dcr – component palette glyphs.
  • PJShellFoldersDsgn.pas – property editor and component registration source code.
  • ReadMe.htm – read-me file.
  • ChangeLog.txt – unit's change log.
  • MPL-2.txt – the Mozilla Public License v2.0.
  • Documentation.URL – short-cut to the unit's online documentation.
  • PJShellFolders.hlp – help file that integrates with the Delphi 3-7 OpenHelp system. Deprecated
  • PJShellFolders.als – a-link keyword file for integration with the Delphi 6 or 7 OpenHelp system. Deprecated

In addition to the above files you will find the source code of a demo project in the Demo sub-directory.

You can now install the components into the Delphi IDE. To do this, the files PJShellFolders.pas, PJShellFolders.dcr and PJShellFoldersDsgn.pas should be added to a design time package. If you need help doing this see here.


The Shell Folders Unit is comprehensively documented online here

The project's change log can be viewed on SourceForge

A read-me file (ReadMe.htm) is included in the project download.

A legacy WinHelp help file is included in the download that can only be integrated with the IDE in Delphi 7 and earlier. This article explains how to do it.

This help file is deprecated and is no longer being updated. The last update was in the v2.3.1 release. The help file will be removed from any future release.

WinHelp is an optional download for Windows Vista through to Windows 8.1 and can't be installed at all on Windows 10.

Feedback & Queries

If you find any bugs or want to suggest a new feature please report them using the Issue Tracker.

Click the Create Ticket button to create a ticket then complete the form giving as much information as possible.

The issue tracker is shared among all the projects in the DelphiDabbler Code Library, so please make sure you enter shellfolders in the Project edit box to make it clear which project you are referring to. You should also choose Defect in the Type drop down list to report a bug or Enhancement to request a new feature.

If you have created a bug fix or have implemented a new feature please attach a zip file to your ticket that contains your source code.

Should you have any queries about using the unit please read the documentation. If you can't find an answer in the documentation then post a message in the discussion group.


The Shell Folders Unit is open source. It is copyright © 2001-2014 by Peter Johnson. The source code is made available under the terms of the Mozilla Public License v2.0. All relevant trademarks are acknowledged.