What is New in ShellBrowser Delphi Components?
Version 12.2
New Features and Improvements
-
C++ Builder: The ShellBrowser packages now support the Win64 (Modern) Platform in C++-Builder projects that was introduced in RAD Studio 12.
-
Custom Icons: We have added a possibility to customize the element icons in the TJamShellList, TJamShellTree, TJamDriveList and TJamFileList. This is realised via a global eventhandler, allowing you to chose different icons for either single elements or e.g. per file extension. Please check the source code of the "JamExplorer" example project for an illustrating demonstration.
-
Custom Previews: We have also added the possibility to add own implementations for previewing files in the TJamFilePreview. This is useful, if you e.g. want to use a special component you have for showing pdf files, instead of using the preview handler that is installed in the system. An example for the usage can also be found in the JamExplorer example project.
-
The TDetailsPane has been adapted to Windows 11 styling and has been refactored internally.
Bugfixes
-
If the "IncludeHidden" property is false, the TJamFileList now finds non-hidden elements, even if a parent folder is hidden.
-
A problem concerning 64-bit builds of C++Builder projects using ShellBrowser has been fixed.
-
The TJamDriveList now fills the items asynchronously. This handles possible application freezes that might have occurred with slow or unreachable network resources.
-
TJamShellTree: A possible application freeze when loading a node for an unreachable element, is now prevented.
-
Some shell operations that might have caused application freezes for very slow or non-accessible elements are now handled asynchronously.
-
A problem changing the viewstyle for the TJamFileList has been fixed. Under Delphi 12 this might have caused an AccessViolation before.
-
High DPI improvements especially concerning the TJamShellBreadCrumbBar.
-
The TJamFilePreview now tries to display the file as textual content when no preview handler is registered or if the registered preview handler fails for some reason.
11/26/2024
Version 12.1
Features and Improvements
- Support for RAD Studio 12 Yukon has been added.
- TJamFilePreview: Using the new “LoadFromStream” method, you can now load a file preview directly from a TStream. The file extension that must be passed as parameter determines the PreviewHandler that will be used for the displaying the file. As most PreviewHandlers work with file paths internally, the stream is written to a temporary file, which is then displayed.
- Context Menu: The modern “Share” command, that was introduced with Windows 10 is now working in ShellBrowser’s context menu. This affects all components that automatically provide an item’s context menu, like the TJamShellList, TJamShellTree, TJamFileList. Unfortunately though, your project must be built using RAD Studio 10.3 or higher for the functionality to work.
- Context Menu: Opening the parent folder is now reported as “saGoUp”.
- TJamShellTree: The ShellTree will now automatically add new root nodes if the folder that is passed via a TJamShellLink is not available within the current nodes. This only applies, if the ShellTree supports more than one root node (i.e. the "MultipleRoots" property is not set to mrSingleRoot). For example: if the "Network" node is not included in the ShellTree, and the user tries navigating a network share in a linked BreadCrumbBar, the "Network" node will automatically be added to the ShellTree.
- The “JamExplorer” example project now illustrates supporting a dark and a light mode in an application.
- Some refactorings to the code base have been applied and new units were introduced. We’ve taken care not to introduce major breaking changes, but if you run into a case where a type is not found in the unit where it was before, please try adding “Jam.Shell.Controls.DriveList” to the “uses” clause in cases where a TJamDriveList is involved. The base listview related classes and some dependent types have been moved to new unit “Jam.Shell.Controls.BaseShellListView”, so you might need to add this manually, too, in cases where it doesn’t happen automatically.
Please, don’t hesitate to contact the ShellBrowser support, if you experience other compatibility issues.
Bugfixes
- A fix concerning the enumeration of Special Folder "Desktop" that was introduced in v12 unfortunately has a major side-effect: the fix causes app freezes if executed in a dll. This has been fixed.
- Context Menu: The “OnBeforeCommand” now passes “saUnknown” as value for a command, if the context menu, that was selected by the user, doesn’t provide a verb. In the past, those menu items were reported as “saDefault”, which is normally the command that is executed when double-clicking an item.
The work on this unfortunately introduced a breaking change: If you want to trigger the default command in code, you could in former versions pass an empty string to e.g. “TJamShellList.InvokeCommandOnSelected”. Please explicitly pass “saDefault” for this.
- TJamShellList: In rename operations it is now possible to remove the extension of a file, even if Windows Explorer is configured to hide extensions. In prior versions, trying to do so didn’t have any effect.
- TJamShellList: In recent versions, it was not possible to rename shortcuts (elements with extension “.lnk”) correctly. Depending on the setting, whether the file extensions were displayed in the controls, the “.lnk” extension was dropped during the rename operation. This has been fixed.
- TJamShellList: The “OnBeforeCommand” event is now also called for a rename operation that has been started via 2 mouse-clicks.
- TJamShellList: A potential AccessViolation that might have happened executing commands such as copying via "Ctrl-C" is now prevented.
- TJamShellList: Even if IconsBasedOnFileExtension is set, shortcuts will now display the real icon of the file instead of a generic file icon. The icon is fetched asynchronously.
- TJamExplorerBrowser: Using the setting “FileSystemOnly”, zip files are now not hidden from the view anymore. It is just not possible to view their content in the ExplorerBrowser control.
- TJamDriveList: Updating the list with changing drives and devices has been improved. In prior versions, attaching or detaching USB devices sometimes was not reflected in the DriveList in time.
- TDetailsPane: A problem where the property display was cut off on high dpi has been fixed.
12/05/2023
Version 12.0
Improvements
- The component for managing the installation keys has been renewed. Therefore, all customers need new installation keys for V12, which are available in our customer area.
- RAD Studio versions XE3 - XE6 are no longer supported.
- When adding a ShellBrowser component to a form, the dependent units are now automatically added to the uses clause. This avoids the need manually find and add units e.g. when implementing an event in a ShellBrowser control, that uses types from other units.
- TJamFileList, TJamShellList, TJamShellTree: To improve the "OnBeforeShellCommand" event and avoid a breaking change, there is now a new "OnBeforeCommand" event, that passes a configuration record with details on the command being called, and allows to intercept further execution of the command (just like the parameter "AllowExecution" in OnBeforeShellCommand).
- TJamFileList: Using the new "ExecuteDelete" property, you can now control, whether deleting items from the FileList using the context menu or keyboard deletes items in the file system or only removes the items from the list. Note, that the default value is false, which is a functional change compared to prior versions.
- TJamShellList: The dialog for column selection now includes an option to filter columns by name.
- TJamFileList: If the user presses Ctrl-V in the FileList, files in Clipboard are now added to the FileList. The same functionality can be achieved by calling "TJamFileList.InvokeContextMenuCommand(saPaste)".
- JamBrowseForFolder: The TJamBrowserForFolder dialog now has a new flag TJamBrowseFlag.bfAllowMultiSelect that allows a multi-selection of folders. If this flag is active, the folders will be supplied in the new "ItemIdLists" property, which can be easily iterated using a for-in-loop.
- TShellBrowser: Added TShellAction.saOpenWith which allows to programmatically trigger the "Open With" dialog for a file.
- TJamFileList, TJamShellList, TJamShellTree: The "OnMouseWheel" event is now available in the object inspector.
- TJamFileList: Using the new "CaptionFormat" property, it is now possible to control if the caption displays the complete path or only the file name of an item.
- TJamFilePreview: Like in Windows Explorer, previewing files from cloud storage that are not available offline, won't display the IPreviewHandler based preview to avoid a download of the file. This does, however, not affect thumbnails, so image files can be previewed normally.
- TJamShellList, TJamShellTree: The "ghosted " state of items, that appears when an element is cut, is now refreshed more often, and is reset if pasting fails or is cancelled.
Bugfixes
- TJamShellList: A problem where the contents of columns were not displayed correctly in library folders has been fixed.
- TJamShellList, TJamShellTree: A problem, where some elements in the Desktop folder of Windows 11 were shown duplicated, has been fixed.
- TJamFileList: Adding items to a hidden file list and showing everything later now works as expected.
- TJamShellSearchEdit: The search could possibly return too many, seemingly unrelated results. This has been corrected.
- Several minor issues have been fixed and improved.
05/12/2023
Version 11.4.1
Improvements
- TJamShellList, TJamShellTree: In prior versions, net drives and machines found in the network were enumerated asynchronously. Elements were added one by one to the ShellTree or ShellList. For fast net drives this might have caused some unnecessary overhead and flickering, especially in the ShellTree. Instead of just assuming a net drive *might be* slow, ShellBrowser now checks and switches to synchronous enumeration if contents can be listed sufficiently quickly.
Bugfixes
- TJamShellList: The column selection dialog that is used to select the visible columns in the ShellList is now scaled correctly in high dpi use cases.
- TJamShellTree: Files newly added due to a change notification now check the Filter property before they are added.
- TJamShellTree: ZIP files are only displayed beneath the "Quick Access" node if the ShellTree is configured to show files.
- TJamShellList: A performance issue that appeared when switching the “Viewstyle” property to “vsSmallIcons” in a large folder has been fixed.
- Several minor issues especially in the ThreadPool have been addressed.
10/07/2022
Version 11.4
New Features and Improvements
- A new "Jam.Shell.Dialogs.TJamFileDialogFrame" has been created. The component is a predefined frame which is mainly built around an ExplorerBrowser control. It may serve as a major building block for custom file dialogs. Using the properties "FolderMode" and "SaveMode", it can be used as a Folder, Open File or Save File dialog. The Frame is available in the component palette of RAD Studio. In addition, we ship the source code of the Frame if you want to inherit or further modify the frame. To get an impression, please check the new "FileDialogFrame" sample project that you can find in the samples directory of the installation. It also contains the source code files of the component.
- TJamExplorerBrowser: Using Delphi 10 Seattle and higher, the ExplorerBrowser now fully supports the usage of VCL-themes via two external libraries - VCL Styles Utils and DDetours. For usage instructions, please refer here. You can also check the new "FileDialogFrame" example project, that is contained in the "Samples" folder of the installation directory.
- The ThreadPool class, that ShellBrowser has been using internally for a long time, has been refactored and fully documented, so you can use it in your own applications, too. We’ll post a blog article on capabilities and examples of use soon.
- TJamShellList: The "Incremental Search" feature has been fixed. In Windows Explorer it is possible to type letters to focus respective list elements. In the TJamShellList this only worked, if the item had been visible before, and was thus fully loaded. A workaround that you might have applied was to set the TListItem.Caption property in the "OnAddItem" event handler. This workaround can finally be removed. We have also changed the "FindCaption" method of the list classes, improving performance especially for large folders.
- TJamExplorerBrowser: Using the new "OnBeforeDefaultAction" event, you can now intercept the default command for elements in the ShellView pane of ExplorerBrowser. Setting the passed "Cancel" parameter to true will stop the action that will be performed when double-clicking, pressing Enter or choosing the default command from the context menu. The old "OnDefaultAction" is still called, too. Implementing it, allows you to completely replace the default action that will normally take place.
- TJamShellSearchEdit: The magnifying glass can now be hidden using the "ShowButton" property.
- TJamFolderCombo: The Drop Down list is now resized automatically to accommodate long paths. In prior versions, the width was fixed, and longer elements were cut off.
- TJamShellList: The "Status" column that provides the synchronization state or offline availability of files residing in OneDrive contains an icon in Windows Explorer. Unfortunately, this is currently not possible for the list classes of ShellBrowser. So, instead of presenting an empty column, there will now be a string representation of the status.
- JamBrowseForFolder: Using the new "bfForceHiddenFolders" option, you can now force the visibility of hidden elements, regardless of the Windows Explorer option to show or hide hidden elements, which is taken into account normally. Note, however, that this works for the new dialog style only.
Bugfixes
- TJamShellList, TJamShellTree: The long delays that occurred, when opening a folder containing SolidWorks files, have been fixed.
- TJamShellList: Opening more than one image file at once via the context menu, now only opens one instance of Microsoft Photos, instead of opening each file in its own instance.
- TJamFilePreview: If Adobe Acrobat was implicitly started by displaying the preview of a PDF file, it is now closed when the window hosting the TJamFilePreview is closed.
- TJamShellTree: A problem where manipulating the registry in order to suppress Quick Access in Windows Explorer caused an EShellBrowserException in the ShellTree has been fixed.
- TJamShellList: The "Destination" parameter of the "OnOperation" event has been fixed to contain the correct path delimiters.
- TJamShellList: When using VCL styles, the missing sorting indicator in the ListView's column header has been added.
- TJamShellTree: An AccessViolation that might have happened when renaming a folder in a filtered ShellTree, is now prevented.
- We have worked a lot behind the hoods. We tried our best to minimize side effects and breaking changes, but please don’t hesitate to get in contact if you experience problems.
08/10/2022
Version 11.3
New Features and Improvements
- Support for RAD Studio 11 has been added.
- The ShellBrowser Components no longer support Windows Vista.
- Windows 11 compatibility has been improved. Some finetuning still needs to be done in the next version.
- Using the new "FileNameFormat" property, you can control, whether the TJamShellList or TJamShellTree displays file extensions or not. The default value is "Auto", which keeps the former behavior and uses the respective Windows Explorer setting. The TJamOpenSaveCombo also supports this setting, but here the default value is to always show extensions.
TJamShellList
- Using new property value "PersistentSpecialFolder" in the ShellList's "PersistViewSettings" property, automatically stores settings such as the sort order and the displayed columns in the Windows Registry. Compared to the "Persistent" value, that has been supported before, using the new value all file system folders share the same settings, whereas "special folders" such as e.g. Desktop, Pictures, etc. can be configured separately.
- Additionally, a problem using the per-folder persistence of view settings using the "PersistViewSettings=Persistent" property has been fixed. The sort order is now stored and re-applied appropriately.
- Using the new "CheckMode" property, more checking options are available than with the former "CheckBoxes" property. The following options are available:
- "None": no checkboxes
- "SelectionList": only works if a ShellLink is attached. Checked items are collected in the ShellLink's "SelectionList" property. Checking items works recursively (i.e. elements in a checked folder are checked, too). Also the ShellLink propagates check states to other ShellBrowser controls displaying check boxes and using the same ShellLink instance.
- "Simple": check states are temporary to the current view and not shared across controls.
- "AutoCheckSelect": like the simple mode. Additionally, check states and selection states are kept in sync.
TJamShellTree
- The "OnAddFolder" event that can be used to prevent nodes from being added to the ShellTree is now called for root nodes too.
- The component's appearance has been improved when using a "dark" background color either by using a dark Delphi theme or by setting the background color.
- Like Windows Explorer, the ShellTree now adds all available OneDrive nodes (OneDrive for Business, OneDrive Personal) as root nodes.
- The ShellTree now respects that OneDrive nodes can be suppressed per GPO.
- The Quick Access root node is not added automatically if Quick Access is hidden in Windows Explorer via the respective registry setting (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HubMode).
- Setting "ShowNethood" to false, now also affects the network node, if it is displayed as root node, like when the Windows Explorer is configured to not "Show all folders". In recent versions, the node was only suppressed if it appeared beneath the "Desktop" node.
- The initially selected node is now automatically expanded when the ShellTree is loaded if it is a root node. In prior versions, it was only selected, but not expanded.
TJamDriveList
- The handling of unreachable paths in the DriveList has been improved:
- Non-existing paths or unavailable net-drives are now displayed with a disconnected symbol.
- The "OnInfoTip" event, that can be used to set custom tooltips, is now also called for paths that do not exist or for unreachable drives.
- After the data of a drive has been loaded, the "ListItemAction" is now called with "TJamListItemAction.shiDataLoaded" as event type parameter.
- The "CheckIfExists" property now also removes unreachable net drives from the list once they are detected as being unavailable.
- Using the new "WarnColor" and "ErrorColor" properties, the colors that are used to present the Free Percentage Column Bar can now be adjusted. Background and border of the Free Percentage Bar are now chosen according to the applied VCL theme.
TJamFilePreview
- Using three new properties, you can now customize the messages the control displays:
- “SelectFileMessage” in case no file is selected.
- "PreviewNotAvailableMessage" if the selected element does not provide a preview.
- "PreviewNotPossibleMessage" in case something has gone wrong when trying to load the preview.
- A new internal preview has been added for text files. It can be used by setting the "UseSystemTextHandler" property to false, e.g., in the form's "OnCreate" or the "OnLoadPreview" event of the FilePreview. Amongst other internal benefits, this ensures that the text preview complies to the set VCL theme. However, the feature is still experimental, therefore it is not activated per default.
- TJamFolderCombo: It is now possible to add paths containing wildcards to the FolderCombo, without them being checked for existence. In prior versions this did not result in an error, but the paths were not added to the drop-down list.
- TJamShellBreadCrumbBar: If the root of the BreadCrumbBar is set to anything else than "Desktop", for clarity and usability the root node is presented as left-most breadcrumb. In contrast, if the BreadCrumbBar is rooted at Desktop, this basically redundant item is only visualized by a compressed breadcrumb at the beginning.
- TJamItemIdList: The ItemIdList and components now supports Volume GUIDs as paths. This enables navigating e.g. virtual drives that have no mount points, such as a drive letter or a folder in the file system.
Bugfixes
- C++ Builder Support: The Win32 HPP files for C++ Builder are now installed in the correct path.
- TJamPathEdit: The component is now scaled correctly, when only primary monitor is scaled and the application is started on an unscaled secondary monitor.
- TJamShellTree: The "SelectedFolder" property is now persisted and restored correctly.
- TJamShellTree: A ShellTree whose "MultipleRoots" property is configured to "mrFirstLevel", now handles file system changes in the scope the ShellTree displays correctly. New folders are automatically added as new root nodes, deletions and renaming are applied correctly. In former versions, the ShellTree has ignored changes concerning root nodes.
- TJamShellTree: The "FileSystemOnly" property is now respected if property "MultipleRoots" is set to "mrFirstLevel". This avoids ZIP files being displayed as root node.
- TJamShellTree: An Access Violation that occurred when destroying a component not with its parent form, but separately beforehand, has been fixed.
- TJamShellTree: Fixed an issue, where drives did not have a caption, when setting the "ShowShellNames" of the ShellTree to false.
- TJamShellTree: The "RowSelect" property is now applied correctly, even if "UseSystemStyles" is set to true.
- TJamShellTree: The file icons and checkboxes are now scaled correctly with a "Per Monitor v2" manifest.
- TJamShellBreadCrumbBar, TJamShellTree: Setting and synchronizing properties that determine the root of the component (i.e. "RootedAt" vs. "RootedAtFileSystemFolder") and the selected path of the component (i.e. "Path" vs. "SpecialFolder") has been improved to avoid problems at design- and runtime.
- TJamShellList: Trying to create a new folder via the "CreateDir" method in an unsuitable parent folder (like e.g. the Network or This PC virtual folders), now raises an EShellBrowerError with a localized message.
- TJamShellList: ViewStyle "Thumbnails" now respects custom captions set in the "OnAddItem" event, instead of displaying the default names.
- TJamShellList: It is not possible anymore to enter the edit mode of the parent folder ("..") item by executing two slow clicks on it.
- TJamShellList: The "SelectionChanged" event is now called when adding files to the "SelectedFiles" property.
- TJamShellList: A glitch in the display of file icons when moving the ShellList between scaled monitors has been corrected.
- TJamShellList: If Windows classes supplying the info box in a Drag-and-Drop operation are not available or do not work, like it was reported for ShellBrowser running on Citrix, we now try to continue without this add-on. The Drag-and-Drop operation then simply runs without the extended info box.
- TJamShellList: Fixes concerning the handling of custom columns have been incorporated: "IsColumnVisible" now returns the correct value and event "OnAfterShellColumnChanged" is called.
- TJamExplorerBrowser: Fixed a "Resource is in use" error that might have occurred when navigating a folder while the ExplorerBrowser was not ready.
- TJamFilePreview: Per Monitor DPI scaling issues concerning the standard preview handler for text files and for Microsoft Word files have been fixed.
- TJamDriveList, TJamFileList, TJamShellList: Flickering issues concerning the display of tooltips for items, that especially occurred with VCL styles, have been addressed and reduced significantly.
- TJamDriveList: Items that have been added via the "AddEditable" function are now removed from the list if the user didn't touch the initial edit text. In former versions the user had to press Escape to cancel the item explicitly.
- TJamPathLabel: If there is not enough space, the beginning of the path is retained in the caption instead of being shortened. Also, a protocol at the beginning of a URL is not omitted.
- TJamFolderCombo, TJamShellCombo: Improved flickering issues occurring during the resizing.
- TJamPathEdit: The image is now displayed correctly if the control is disabled.
- TJamFilePreview: Exceptions that might have occurred when destroying the Preview while a file is still loading or unloading asynchronously, should not occur anymore - the Preview is given some time to finish gracefully under these conditions.
- TJamFilePreview: A possible exception and small memory leak concerning pdf previews using Adobe Acrobat has been fixed.
12/15/2021
Version 11.2
New Features and Improvements
- Support for RAD Studio 10.4 Sydney has been added. This includes support of the “Per Control Styles” VCL feature new in 10.4. Check this Blog-Post for usage.
- A new control TJamDetailsPane was added. It combines displaying file metadata with a thumbnail or preview of the file. It is similar to the Details Pane that can be enabled in the Windows Explorer on the right.
- TJamPathLabel: The control TJamPathLabel now has a property ExecuteOnDblClick. If set to True (the default value), the displayed path is executed / opened when the user double clicks it.
- TJamFileList: The performance of sorting items by element type has been improved.
- TJamFilterCombo: Using the new "FilterString" property, the filters that are displayed in the drop down can be set as '|' separated string, e.g. 'Text|.txt|Images|.jpg;.png|Everything|.*'
- Setup: If a non-default installation path was used, the installer now remembers the installation path and suggests it again when installing an update.
- TJamPathLabel: It is now possible to connect the PathLabel to other components using a TJamShellLink.
- Additionally, the PathLabel supports virtual elements without file system path.
- TJamShellList: No backslash is appended to the end of the path in the "Path" property.
- Note, that this might be a Breaking Change, if your code relied on it.
Bugfixes
- TJamFilePreview, TJamThumbnailImage: A GDI handle leak that occurred when displaying thumbnails has been fixed.
- TJamShellHistoryPane, TJamShellTree: The browsing history now works correctly when the currently active folder gets renamed in the ShellTreeView.
- TJamFilterCombo: Programmatically selecting a filter by setting the "ItemIndex" property now refreshes other components linked via a TJamShellLink.
- TJamShellTree: The Quick Access node was not expandable anymore when setting the “FileSystemOnly” property to true at runtime. This has been fixed.
- TJamFileList: No exception is raised anymore when trying to drag non-existing elements. This situation has to be handled by the target of the drag and drop operation.
- TJamFilePreview: Files on cloud storage that are not available offline, are not previewed anymore, because this triggers the file being downloaded. Files already available offline are previewed normally.
- TJamShellTree: Renaming a folder in the ShellTree could occasionally cause an error. This issue has been fixed.
- Several minor fixes and improvements have been incorporated.
06/16/2020
Version 11.1
New Features and Improvements
- The new "TJamFilterCombo" represents the Filter ComboBox that is known from Windows File Dialogs. You can specify file extensions that serve as filters for other components connected using a TJamShellLink. In editable mode the component can also be used to apply non-predefined filters, that can be typed on the fly.
- The new "TJamOpenSaveCombo" component represents the editing component that is used to select or provide a filename in standard Windows File Open - or Save Dialogs.
- In the dropdown list it presents the last used files. Using a TJamShellLink, it can be connected to other ShellBrowser components, to synchronize the current directory or filter the files available in the drop-down. See the "Dialogs > Custom File Open Dialog" in JamExplorer for an example usage.
- TJamShellList, TJamFileList, TJamDriveList: The sorting has been reworked.
- Using the new “Sort(TShellColumnId, TSortDirection)” method, items can now be sorted by all shell columns, no matter if visible or not. This works in all viewstates.
- For performance reasons you can set a list to unsorted, using the "IsSorted" property. This is the default for the FileList. In contrast to the former release, the last sort order is still kept, so you can turn off and reactivate sorting at any point.
- TJamFileList, TJamShellList: Like Windows File Explorer column "Item Type" is now sorted by the visible value instead of sorting it by the respective file extension.
- TJamShellList, TJamFileList: When sorting for columns that contain date or number values, the default sort order is now descending.
- TJamShellTree: There is a new option for the "MultipleRoots" property: "TMultipleRoots.mrFirstLevel" uses the root folder assigned to "RootedAt" or "RootedAtFileSystemFolder"; yet, instead of presenting this folder as single root node for the ShellTree it will enumerate all subfolders and add them as root folders.
- TJamShellLink: You can now restrict folder access for all controls linked with a TJamShellLink instance using the new "OnNavigating" event. The event is called before the path is changed for any of the controls linked with the TJamShellLink instance and setting the "Cancel" parameter will abort the path change.
- TJamDropFiles: The "IDataObject" of the drag-and-drop operation can now directly be accessed via the new "DataObject" property.
- TShellBrowser: Improved per-monitor high DPI scaling of icons from system image list.
- TJamShellList: It is now possible to create a custom column before the "Name" column, by setting the Index to “0”. If "FullDrag" is activated, it is possible to temporarily move the name column to a different position. Note, that it will be restored at the first position when the columns are loaded the next time.
- TJamDriveList, TJamFileList, TJamShellList: Columns can be consistently renamed using the new "OnGetColumnInfo" event. The given name will be used in the header context menu and column selection dialog too.
- TJamShellList, TJamFileList, TJamShellTree: Introduced the new "OnSelectionChanged" event for the ShellList, FileList and ShellTree. It is called when the selection changed or is removed, but unlike "OnSelectItem" it is not called for every item in the selection.
- TJamShellList: "Paste" and "New folder" are now available and working in the ShellList's background context menu of an attached mobile device.
- TJamDriveList: The disk space information for individual drives is now updated every 10 seconds. This time span can be changed with the new property "DefaultUpdateInterval". The functionality can be switched off by setting the value to "0".
- TJamShellList, TJamFileList: The new property "IconSize" can be used to configure the size of icons in viewstyle vsIcons. Properties "ShowJumboIcons" and "ShowExtraLargeIcons" still exist, but were removed from object inspector. Also, setting any of these properties or property "Thumbnails" to false, doesn't have any effect anymore; instead the wanted icon size needs to be set. This is a breaking change.
- The default value for "IconSpacing" has been changed to "-1" which means that the space is automatically set.
- The new procedure "SendDropFiles(HWnd, TStrings)" in ShellBrowser sends a list of given files to a window, simulating a manual drag-and-drop operation to the window.
- TJamFilePreview: Using the new "TJamFilePreviewLoadPreviewEventArgs.ForceGuiThread" option in the "OnLoadPreview" event, you can force that a preview is loaded and unloaded synchronously instead of being handled in a separate thread. This might fix problems concerning single PreviewHandlers or use-cases, where PreviewHandlers don't work as expected when loaded asynchronously.
Bugfixes
- General: Fixed per monitor high DPI issues in various components.
- Thumbnails, TJamFileList, TJamShellList: To avoid delays that might occur when folder thumbnails are retrieved, a new property "FastFolderThumbnails" was introduced. If set to true (default), folder thumbnails previewing the contents of the folder are only displayed, if they have already been cached.
- Thumbnails: Using Adobe Acrobat as thumbnail handler, thumbnails of pdf files that were retrieved in non-standard dimensions, turned up black. This has been fixed.
- TJamFolderCombo: The "Sorted" property now works as expected: if set to false, the items will appear in the order they were added. The default value for this property was changed to "true".
- TJamShellTree: The Quick Access node now doesn't contain zip archives, unless "ShowFiles" is activated for the ShellTree. Also, zip-archives are recognized using file attributes instead of checking the extension.
- TJamShellTree: Fixed the problem, that it was not possible to select a node in Windows 7 "Favorites" root node, if the "ShowErrorMessages" property was set for the ShellTree.
- TJamShellTree: When painting a selected node, the VCL theme's default text color is retained even if the ShellTree doesn't have the focus. For dark VCL themes this avoids dark text on dark background.
- TJamShellList: Improved performance when inserting a large number of elements into a folder via drag-and-drop or copy-paste.
- TJamShellList, TJamShellSearchEdit: If a search result is presented, and you go to the parent folder via pressing backspace or a history component, the folder the search was started in is now reopened, not Desktop.
- TJamShellList: Due to an internal issue, not all available Shell columns could actually be added to the ShellList. This has been fixed.
- TJamShellList, TShellBrowser: Opening a bitlocker secured drive now shows the password dialog even from 32-bit applications.
- TJamShellList: A flickering problem that occurred with custom columns and using a VCL theme has been fixed.
- TJamShellList: Improved thumbnail performance.
- TJamShellList: A possible “EInvalidOperation” error that might have happened during the execution of an "OnThumbnailUpdated" eventhandler is now handled.
- Instead of appearing unsorted, columns in the TJamShellColumnSelectionDialog are now sorted alphabetically if the "MultiSelect" property is set to false.
- TJamShellList, TJamFileList: The "AutoAdjustColumnWidths" method, that automatically resizes columns concerning to fit their contents, now works again when called in the "OnPopulated" event of the ShellList. Also, it is now possible to pass a min-max range that must not be exceeded.
- TJamFileOperation: Instead of "TCommonDialog", TJamFileOperation now extends "TComponent" again, so that it is included in the Component Palette of Rad Studio also for data modules.
- TJamDriveList: The "OnAddItem" and "OnAddPath" events are now called again, when the DriveList refreshes its contents (e.g. by pressing F5). Values for custom columns have to be provided again in one of these events.
- TJamDriveList: A visual issue concerning the sizing of the "AutoSizeColumn" has been fixed.
- TJamDriveList: Worked on possible delays concerning unreachable locations.
- TJamPathLabel: Prevented a possible delay when loading a non-reachable path.
- General: Fixed a possible "EUseAfterFreeError" that is reported by EurekaLog for the TJamShellCommand.
- TJamShellCombo: Fixed a memory leak, that might have occurred under specific conditions (control's handle was recreated and finally destroyed while being invisible).
Breaking changes and deprecated warnings:
- Type “TJamSortDirection” has been moved from unit JamSystemShellView to Jam.Shell.Types.
- TJamItemIdList: "TItemIdListDisplayNameFormat.dnf_RelativeForAddressBar" was renamed "TItemIdListDisplayNameFormat.dnfRelativeForAddressBar".
- TJamShellList, TJamShellTree: Instead of returning an empty string, some path related properties now return the display path of an element if no physical path is available (e.g. for virtual folders). These are TJamShellTreeNode.FullPath, TJamShellListItem.FullPath, TJamShellList.Path, TJamShellTree.SelectedFolder. Use the "Path" property of the respective ItemIdList if you rely on the old functionality.
- Also, "TJamShellList.GetFullPath" is now deprecated. Use TJamShellItem.Path or TJamShellListItem.AbsoluteItemIdList.Path instead.
- Threadpool: TDelayedProcedure.Create is now deprecated. Use class procedure "TDelayedProcedure.CreateAndQueue" instead.
- TJamFolderCombo: TJamFolderCombo.AddFolder() now adds the given path asynchronously to prevent application freezes if the path is not reachable. Therefore, it no longer returns the new item's index which is a breaking change. If you used the return value to select the added item, please use the SelectFolder() method instead.
12/18/2019
Version 11.0.1
New features and improvements
- TJamShellBreadCrumbBar: Introduced property "OnPathChanged" which occurs if path has changed.
- Setup: "EShellBrowserError", which is often used and handled internally, is now automatically added to the exception types that should be ignored in the debugger.
- TJamShellBreadCrumbBar: Published properties PopupMenu and OnContextPopup to provide custom background context menu support.
Bugfixes
- TJamShellList: Improved appearance and performance of the thumbnail view.
- TJamShellList: In the context of high dpi scaling, spacing between icons or thumbnails are now also adjusted to avoid potentially overlapping items.
- TJamShellList: Some potentially unhandled EInvalidOperation errors from TShellBrowser.GetShellObjectName are now prevented.
- TJamShellList: Fixed the loading of column headers when PersistViewState is "None".
- TJamShellList: Column widths are now stored and restored properly on high dpi.
- TJamShellList: Fixed an issue that the sort order was not properly stored, when it was set using the "ReverseSortOrder" property. Note that saving the sort order only affects viewstate vsReport.
- TJamItemIdList, TJamShellList, TShellBrowser: Invoking the "saDefault" action on a ShellListItem or ItemIdList or double-clicking an item in the ShellList now again passes the current directory as working directory to the executed command, instead of executing the default command in the context of the current application.
- TJamShellList: The ItemIdListCollection that is passed in the "BeforeShellCommand" event now always contains absolute ItemIdLists.
- TJamShellList: Fixed the issue that the "Date" column that holds the "System.ItemDate" property and is e.g. displayed for the Pictures folder, is empty in the ShellList.
- TJamBaseShellListView, TJamShellTree: Instead of a TShellBrowser instance, the "OnBeforeShellCommand" now passes the control as "Sender".
- TJamShellTree: The ShellTree was not able to identify a node when its contents were changed in the meantime. As a consequence when adding files to a folder and reselecting the respective folder in the ShellTree, a duplicate node was added. This problem has been fixed.
- TJamShellTree: Fixed the issue that the "CreateDir" method did not switch reliably to edit mode to change the default folder name. Also, the method now creates a unique new folder name.
- TJamShellTree: Preventing a possible EArgumentError that might have occurred when handling rename notifcations.
- TJamExplorerBrowser: On Windows 10 Version 1809, the Windows Explorer supports a dark mode. When it is used, there are side effects on the ExplorerBrowser, which turns partly dark as well. We have opened a ticket about this at Microsoft. A preliminary bugfix should avoid a partly black and partly light themed ExplorerBrowser.
- TJamShellBreadCrumbBar: The scaling of separators between breadcrumbs has been improved in high dpi.
- Examples: The example projects have been improved when executed on a scaled monitor.
- TJamDriveList: A potential freeze of the main thread caused by adding non-reachable elements to the DriveList is now prevented.
- TJamItemIdList: Fixed a problem in the "Rename" method, which did not rename correctly if no window handle was passed and file extensions were hidden in Windows File Explorer.
- TJamItemIdList: A possible AccessViolation that might have occurred in the context of a TJamShellBreadCrumbBar on program startup is now prevented.
- Setting TShellBrowser.ObjectName to an empty string now raises an "EShellBrowserError" exception, as it already did for invalid paths.
02/08/2019
Version 11.0
New Features and Improvements
- Support for RAD Studio 10.3 Rio has been added.
- The support for Windows XP and Windows Server 2003 has been dropped. We will continue to support these operating systems in V10.
- You can now access the ShellBrowser help from the Delphi IDE. We have added support for context-sensitive help ("F1") in Delphi IDE for all ShellBrowser types, under the precondition that the Delphi Help system is installed in the IDE.
- TJamShellList: Using the new "PersistViewSettings" property you can now control whether the ShellList:
- persists the column settings on a per-folder base automatically. This works the same way as in Windows Explorer, the settings are stored in the registry. In fact, by default the settings are shared with Windows Explorer. You can, however, set the "PropertyBagName" to some custom value to keep the settings of your program or different ShellLists in the program apart from each other and Windows Explorer.
- stores the column settings per special folder temporarily. The settings will be lost when the program is closed. This is the default setting and was the only possibility in older versions of ShellBrowser.
- doesn't store any column information. In this case, the default columns for a folder will be loaded whenever a folder is opened in the ShellList.
- TJamFileOperation has been reworked completely and put on new grounds internally. It now supports more operations, like creating ZIP files. Static methods were added to start an operation in a single line of code. New flags, like TJamShowOptions.soKeepNewer, were introduced to copy only newer files.
- TJamFileList: Setting the new "FileSystemOnly" property to false, it is now possible to add non-file-system elements to a FileList (e.g. via drag-and-drop). To keep compatibility, the default value of the property is "true".
- TJamThumbnailImage: A new property "AbsoluteItemIdList" has been added. It supports displaying thumbnails for virtual folders or elements without physical path, e.g. from an attached mobile phone.
- TJamFolderCombo: Support for ItemIdLists has been added.
FolderCombo.Add(TJamItemIdList.CreateForSpecialFolder(SF_DOWNLOADS))
will for example add the Downloads folder to the ComboBox.
-
TJamExplorerBrowser:
- Introduced Drag-and-Drop events: OnDragEnter, OnDragOver, OnDragLeave and OnDrop. The events can be used to be informed of and take influence on the Drag-and-Drop operations.
- The new "ShowNethood", "ShowRecycleBin" and "FileSystemOnly" properties have been introduced.
-
TJamItemIdList: The following methods have been added:
- "GetPropertyValue": Retrieves the specified property value as variant type. The result type "TShellPropertyValue" is compatible with OleVariant and TPropVariant. (Note: String representations can be retrieved using the "ItemIdList.GetShellInformation" method.)
- "SetPropertyValue": It is now possible to assign new values to shell properties. (This does not work for non-writeable properties like e.g. the creation date.)
- "InvokeCommand": Executes the passed command on the shell item represented by the ItemIdList.
- CreateNewFolder: Creates a new folder inside the folder represented by the ItemIdList.
- Rename: Renames the shell item represented by the ItemIdList. This method replaces "TShellBrowser.RenameObject" which is marked as deprecrated.
-
Some useful helper methods have been added for auxiliary types:
- TJamShellFolder.ToString() returns display name and ToPath() returns display path.
- TShellColumnId.ToString() returns the canonical name of a shell column. "FromString" creates TShellColumnId from its canonical name.
-
TShellBrowser:
-
The new type "TShellCommand" is now used in various methods that invoke or handle context menu commands. It is compatible with string type command verbs but also supports a set of well-defined commands defined through the TShellAction enum type.
-
Using the new "saOpenCommandPrompt" TShellAction, you can open a command prompt at the specified location, e.g.
TJamItemIdList.Create('d:\').InvokeCommand(TShellAction.saOpenCommandPrompt
-
The new "TShellAction.saDeleteNoUndo" action can be used to delete elements bypassing recycle bin. It can e.g. be used in controls supporting "InvokeCommandOnSelected".
-
The performance when executing a context menu operation on a large number of elements has been improved.
-
-
TJamDriveList, TJamShellList: The "OnShellNotification" event can be used to get notice of the shell change notifications the control receives. Using the "pHandled" parameter in the event signature can be used to stop a notification from being further processed by the control. The event is not available through object inspector but you can attach an eventhandler in code.
-
TJamFilePreview: The Text PreviewHandler is now used for files that contain textual content no matter what file extension they have. PDF and TXT files located on an attached mobile phone can now be previewed. For PDF files Adobe Acrobat must be the default viewer for the preview in order for this to work.
-
TJamShellTree:
- Using the new "SingleSpacedRoots" property, the empty space that is added between root nodes can be suppressed.
- The "OnCheckStateChanged" event was replaced by a new "OnTreeNodeCheckStateChanged". Instead of the path and item index, it passes the ShellTreeNode that is affected by the checkstate change. This is a Breaking Change.
-
TJamFileList, TJamShellList, and TJamShellTree: Property "CopyMode" is now deprecated and replaced by properties "AllowedDragEffects" and "AllowedDropEffects" which can be used to allow only a subset of available Drag-and-Drop operations. Usages of "TJamCopyMode" have been replaced by the very similar type "TJamDropEffect".
-
TJamShellBreadCrumbBar: Introduced “OnAddItem” event which occurs when a breadcrumb was added.
-
TJamPathLabel: Keyboard navigation and usage have been improved: The focus rectangle is now drawn correctly and pressing the space key will now toggle the checkbox (if available).
-
TJamShellLink: The new "OnSelectionChanged" event can be used to track the selection that other components, like e.g. the JamFilePreview, use for synchonization. The event is called whenever the relevant selection changes. The already existing "OnChange" event has been modified to the same eventhandler signature.
-
TJamShellBreadCrumbBar: The arrow symbols used in the BreadCrumbBar now match the Windows version. Now a single click is sufficient to enter the edit mode of a search box.
-
TJamShellChangeNotifier: Added property "NotifyAsynchronously": If False (the default value) the events will be fired in context of the main thread. If True, the events will be fired in the context of concurrent threads.
-
The new unit "Jam.Shell.Types" has been added. We have moved some commonly used types and interfaces there (Aliases have been introduced to avoid breaking changes).
-
Several refactorings and minor have been incorporated. We tried to be very careful and not to induce major compatibility issues. Please don't hesitate to contact us if you experience issues when updating to V11.0 despite our efforts.
Bugfixes
- TJamBrowseForFolder: The dialog remained open, when trying to confirm the initially set folder, unless it had subfolders. This has been fixed.
- TJamShellTree: Files showed a collapse icon after double-clicking. This has been fixed.
- TJamShellTree: For the Libraries introduced with Windows 7 one level of navigation was missing in the TJamShellTree compared to Windows Explorer. This has been corrected.
- TJamShellTree: The "Pin to home" context menu item from the Quick Access context menu is now supported properly, instead of showing a "Not supported" message.
- TJamShellList: Drag-and-Drop performance issues have been improved.
- TJamShellList: The "New" menu item in the background context menu now only appears in folders where sublements can be created. It is e.g. not available anymore in ZIP files.
- TJamShellList: The sort order icon that is displayed in the column header is now restored properly, when additional columns are displayed or removed or when the sort column itself is removed and re-added later.
- TJamExplorerBrowser: A problem causing high CPU usage when navigating to the Windows Control Panel has been fixed.
- TJamExplorerBrowser: The "SelectAll" method now works correctly also for "This PC".
- TJamExplorerBrowser: A repaint problem when trying to select multiple files using Shift+Down has been fixed.
- TJamExplorerBrowser, TJamSystemShellView: Accessing items in C:\Users\AppData\Local\Microsoft\Windows\History does not cause an exception anymore.
- TJamExplorerBrowser: Navigation tree now processes keyboard input correctly (especially "Delete" key).
- TJamExplorerBrowser: Some of the filter options weren't reapplied correctly after "This PC" was displayed. This has been fixed.
- TJamExplorerBrowser: Property ShowHidden is now applied correctly to containing Breadcrumbbar.
- TJamExplorerBrowser: Fixed focus is lost after deleting a file or folder in the right pane of TJamExplorerBrowser.
- TJamDriveList: An empty CD-ROM will now no longer appear in the DriveList.
- TJamDriveList: If "CheckIfExists" is true, not only non-existing drives will be removed, but also non-existing folders.
- TJamDriveList: When an element in the list is renamed, the item is now refreshed properly to display the new name.
- TJamDriveList: Bitlocker encrypted drives are now added, removed and updated correctly.
- TJamDriveList: Repaint issues such as flickering and empty items that might have occurred when resizing the component having a column set as "AutoSizeColumn" have been fixed.
- TJamFolderCombo and TJamShellCombo now revert the edited path when pressing Escape key in edit mode. When typing a new path, the icon is now updated correctly. Performance issues related to slow or unreachable net-drives have been fixed.
- TJamShellChangeNotifier: Calling the "TJamShellChangeNotifier.Clear" method had the effect that all drives were watched for notifications again. Now all folders are now removed from the watchlist; if you want to restore the old behavior add the folders that should be watched after clearing. To watch everything e.g. "JamShellChangeNotifier.AddItemIdList(TJamItemIdList.CreateForSpecialFolder(SF_DRIVES)).
- TJamFileList: The current columns are now restored properly when changing the view or when triggering a FullRefresh even if columns have been reordered by the user.
- TJamFilePreview: The "OnPreviewLoaded" event is now also called for the successful preview of PDF files using Adobe Acrobat.
- TJamFilePreview: Double-clicking the preview of an image file from an attached mobile phone now opens the image file externally.
- TJamShellBreadCrumbBar: Fixed a painting issue in editor of TJamShellBreadCrumbBar when pressing "Alt Gr" for the first time.
11/28/2018
Version 10.4.1
- TJamDragFiles: Using this new component you can start shell drag operations from arbitrary VCL controls. Have a look at the OleDragDrop example project to check out how it works.
- TJamShellSearchEdit: Search results are now added asynchronously to linked components. The TJamShellList now gives feedback on the state of a running search.
- Bugfix - TJamShellList: Problems with filling a ShellList asynchronously (e.g. for network folders or search results) have been fixed. In addition, the "OnPopulated" event is now only called when the folder contents are fully loaded.
- Bugfix - TJamShellTree: The style of fonts is now applied too.
- Bugfix - TJamShellTree: On Windows 10 network drives were not displayed in the "This PC" node occasionally. This has been fixed.
- Bugfix - TJamShellList: Multithreaded access has been improved for a smooth loading of thumbnails.
- Bugfix - TJamShellList: Like in Windows Explorer, files and folders are now sorted separately.
- Bugfix - Windows XP: The TJamShellList will now refresh when file system changes occur on Windows Desktop. Deleting elements via the context menu now triggers the "OnOperation" event.
- ItemIdList: Using the new "IItemIdist.GetPropertyValue" method it is now possible to read metadata from the property system of a shell item.
- Several minor bugfixes and improvements have been incorporated.
07/31/2017
Version 10.4
- Support for RAD Studio 10.2 Tokyo has been added.
- TJamShellBreadCrumbBar: The component now offers an optional refresh button that reloads the current contents of controls linked via a TJamShellLink. The button is part of the "Visible Panes" property.
- TJamShellBreadCrumbBar: Using the "ShowHint" property you can control whether tooltips shall be displayed for the buttons.
- TJamShellBreadCrumbBar, TJamShellHistoryPane: The components now fully support the "StyleElements" property.
- TImageFromImageList: Transparency in images is now supported.
- TJamPathLabel: The path is now resolved asynchronously to avoid potential delays in the main thread when setting its "Path" property to a slow or not reachable resource.
- TJamFileList: When changing the view style of a non-sorted list, the order of items is now kept instead of resorting the list alphabetically by the paths of the items.
- TJamFileList: It is now possible to insert an item at a chosen position by using the new parameter "pPos" in the "Add" method.
- TJamExplorerBrowser: The new "OnNavigationPending" event is called before the control navigates to a new location. Use the "pCancel" parameter to suppress the navigation.
- Breaking change: TShellBrowser.Next() now raises exceptions not only for internet errors, but for all errors, e. g. ERROR_PATH_NOT_FOUND. This allows for better error handling than returning "false"; it also distinguishes between no more objects (returns false) and error (raises exception).
- Breaking change: The "OnBeforeShellCommand" event in TShellBrowser and most of the controls has a changed parameter list: The "Items" parameter has been changed to the type "TMultiObjects", which is a list of IItemIdLists.
- Breaking change: The system type "_tagPropertyKey" that was part of the event handler signatures for "OnBeforeShellColumnChanged" and "OnAfterShellColumnChanged" has been replaced by "TShellColumnID". The types are compatible, but you might need to update the event handlers respectively.
- Bugfix - TJamShellBreadCrumbBar: When navigation breadcrumbs use the keyboard, an empty dropdown menu might have popped up at the last breadcrumb item. This is no longer the case.
- Bugfix - TJamShellBreadCrumbBar: The "AbsoluteItemIdList" or "Path" property now respects the range defined by "RootedAt"/"RootedAtFileSystemFolder". It is not possible to display a path that does not fall within this range.
- Bugfix - TJamShellBreadCrumbbBar: The background color has been corrected for the Windows 7 classic theme.
- Bugfix - TJamShellList: The "Filter" property now also works for the Windows special folder "SF_RECENT", that collects recently used files and folders as links. Please note: The filter applies to the destination files, not the links.
- Bugfix - TJamShellList, TJamFileList, TJamDriveList, and TJamShellTree: The Windows "Explorer" theme can be deactivated by setting the "UseSystemStyles" property to false.
- Bugfix - TJamShellList: The details for items in "Quick Access" are now loaded correctly on Windows 10 version 1607 (anniversary update).
- Bugfix - TJamShellList: The list is resorted once a notification of a file change is received. For example, the order of elements is adjusted if the list is sorted by modification date and the respective value of a file changes.
- Bugfix - TJamFileList: The "InvokeCommandOnSelected" method works again as expected with the shell action "default". Also "OnBeforeShellCommand" is called as expected.
- Bugfix - TJamFilePreview: The preview of TrueType fonts has been corrected.
- Several minor bugfixes and improvements have been incorporated.
04/11/2017
Version 10.3.1
- TJamPathEdit: When the "FolderMode" is activated, the autosuggest/autocomplete feature that assists users when typing paths is restricted to folders and doesn't suggest files anymore.
- Setup: Custom configurations of the BDSCOMMONDIR variable are now respected when installing ShellBrowser.
- On Windows 8 and later, the ShellBrowser Components will now gather and present a default context menu if the context menu is to be displayed for many items (> 200). This fixes a major delay that could occur before the context menu was displayed.
- TJamShellBreadCrumbBar: The "StyleElements" property is now supported.
- TJamSystemShellView, TJamExplorerBrowser: Selecting items programmatically no longer automatically scrolls the selected item into view. This can be accomplished separately by calling "EnsureVisible".
- TJamShellList, TJamFileList: When editing a filename, only the name of the file is selected, not the extension.
- TJamFilePreview: The automatic fallback that was applied if PDF files could not be previewed using the registered preview handler has been removed. It caused a non-controllable error message for corrupt PDF files.
- TJamFilePreview: The "Caption" property is now available as public property. Although still used by the component itself to display the state of the component, it can now be set in an attached "OnLoadedPreview" event handler to display a custom message. The "Touch" property is now available in the object inspector of the IDE.
- TJamDropFiles: The "KeyState" parameter of the drag-and-drop events of TJamDropFiles now includes information about the mouse button that was pressed.
- Bugfix - TJamShellTree: An access violation that might have occurred when setting the "RootedAtFileSystemFolder" property at design time has been fixed.
- Bugfix - TJamFilePreview: Adobe Acrobat's preview handler doesn't work correctly when called asynchronously - previewed files could not be deleted or weren't displayed correctly. ShellBrowser will load the files in the main thread again. A delay that might have occurred when releasing the component has been fixed.
- Bugfix - TJamShellList: A set filter is no longer applied to the contents of the "Favorites" folder in Windows 7 and 8.
- Bugfix - TJamFileList: Column "Rating" is now filled correctly for all items in the list.
- Bugfix - TJamFileList: The "EShellBrowserError" that was raised if an item representing a non-existent path was selected has been fixed.
- Bugfix - TJamExplorerBrowser: A high DPI scaling issue concerning the size of the internal BreadcrumbBar has been fixed.
- Bugfix - TJamShellHistoryPane, TJamExplorerBrowser, TJamShellBreadcrumbBar: An access violation that might have occurred when using one of these components in a library has been fixed. It was caused by the missing initialization of gdi+ under these circumstances.
- Bugfix - TJamShellBreadcrumbBar: A "Resource is in use" error that occurred when selecting an item in trimmed state (i.e. some items have been collapsed to "<<") has been fixed.
- Bugfix - TJamShellBreadcrumbBar: Several minor painting and scaling issues have been fixed. A memory leak occurring on Windows 7 has also been fixed.
- Bugfix - TJamSystemShellView: An internal message displayed when the "CreateDir" method was called with a name for the new directory is no longer shown.
- Bugfix - TJamDropFiles: Dropping files from TotalCommander and possibly other drag and drop sources stopped working with v10.3. This has been fixed again.
- Several minor fixes and improvements have been incorporated.
12/13/2016
Version 10.3
- The new component TJamShellSearchEdit contains the search edit field of Windows Explorer. It supports a "ShellLink" and can be connected to the TJamShellList, TJamSystemShellList or TJamExplorerBrowser to define the scope and present the result of the search. For TJamExplorerBrowser and TJamShellBreadCrumbBar, it can be activated in the "VisiblePanes" property.
- The new component TJamShellHistoryPane tracks the history of components connected via ShellLink. It automatically adjusts to mirror the look of the various Windows versions.
- TJamShellList, TJamDriveList, TJamFileList: The context menu of the header in ViewStyle "vsReport" now contains a "More..." menu item displaying a dialog where the user can select available columns, as known from the Windows Explorer.
- TJamShellTree, TJamShellList, TJamDriveList, TJamFileList: If "OleDragDrop" is enabled, the new "OnBeforeShellDrag" can be used to inspect or change the IDataObject that is passed in the drag-and-drop operation. Setting it to nil will suppress the drag-and-drop operation.
- TJamDropFiles now also supports non-file-system objects like emails or email attachments. If the "UseTemporaryFiles" property is set, the objects are stored as temporary files that are automatically deleted when the control is released.
- The TJamShellLink component can now be used to connect a FileList with e.g. a TJamFilePreview or a TJamThumbnail, so that the file selected in the FileList is automatically displayed in the connected control.
- TJamShellFilePreview: The loading and unloading of the preview is now done asynchronously. Additionally, a small memory leak that occurred for a subset of PreviewHandlers from the system has been be fixed.
- TJamShellBreadCrumbBar:
- Users can now include a TJamShellSearchEdit and/or a TJamShellHistoryPane via the new "VisiblePanes" property.
- The new "RootedAt" and "RootedAtFileSystemFolder" properties can be used to customize the root of the control.
- Keyboard navigation in the BreadCrumbBar is now fully functional.
- Painting of the control has been improved and fixed on the various Windows versions.
- The exception that occurred when trying to use more than one BreadcrumbBar in a project has been fixed.
- TJamShellTree, TJamShellBreadcrumbBar: The "OnResize" event has been published, so it is available in the Object Inspector of the IDE. The ShellTree also provides the "RowSelect" property.
- TJamShellList, TJamFileList:
- If the "OnThumbnailUpdated" eventhandler already assigns a custom thumbnail to an item, no additional background querying of the system's thumbnail takes place.
- Breaking change: Thumbnails that are replaced in this event handler are now released automatically.
- TJamShellList, TJamFileList: The "Groups" and "GroupView" properties are now available. They can be used to add custom grouping of the lists' contents.
- TJamShellList: Some actions that might block the application (e.g. displaying information for unconnected net drives) are now executed asynchronously.
- TJamShellTree: There is now more space between the checkbox and a treenode's icon.
- TJamPathLabel: Users can add a checkbox to the component with the new "ShowCheckBox" property. It comes with the additional property "Checked" and the event "OnCheckStateChanged".
- The C++ sample project in Samples\C++ Builder\Explorer has been merged and is now included in Samples\JamExplorer sharing the main.dfm with its Delphi counterpart.
- TJamShellList, TJamFileList, TJamDriveList: When checkboxes are displayed, pressing the space key now toggles the checkstate of all selected items instead of the first item only.
- Bugfix - TJamFolderCombo: The handling of a large number of shell change notifications has been improved.
- Bugfix - TJamShellTree: The processing of rename change notifications has been corrected. Under some circumstances, renaming led to duplicated nodes in the tree.
- Bugfix - TJamShellTree: When selecting nodes using the keyboard, connected controls were only updated with a slight delay. This can be avoided now by setting the "ChangeDelay" property to 0.
- Several minor fixes and improvements have been incorporated.
09/21/2016
Version 10.2
- Support for RAD Studio 10.1 Berlin has been added.
- TJamShellBreadcrumbBar: the new "FileSystemOnly" property allows to display only elements that have a file system path.
- TJamShellBreadcrumbBar: The popup menus that are used to display the subfolders of an item in the BreadcrumbBar are now scrollable.
- TJamSystemShellView, TJamExplorerBrowser: By using the property "OleDragDrop", users can turn off the possibility to drag files into the control.
- TJamSystemShellView, TJamExplorerBrowser: The new properties "PopupMenu" and "BackgroundPopupMenu" can be used to assign custom context menus to items and to the background of the component respectively.
- TJamExplorerBrowser: On Windows 10 the forward and backward buttons now look like in Windows Explorer.
- TJamExplorerBrowser: The new "InvokeCommand" is a focus-dependent version of "InvokeCommandOnSelected"/"InvokeCommandOnFolder". If the focus is on the navigation tree, the command is applied there. If not, it refers to the selected element of the list part of the control.
- TJamShellTree: The "OnCreateNodeClass" event is now published and visible in the object inspector.
- TJamShellTreeNode: The "TextStyle" property allows to set a tree node in bold or italic.
- TJamDriveList: when adding elements via the "AddEditable" method it's not possible anymore to add more than one editable item at the same time.
- TJamPathEdit: On Vista and later Windows versions TJamPathEdit now uses the new dialog to select a file when the respective dialog button in the component is clicked.
- TJamDriveList: The new "OnListItemAction" event notifies whether the path to be displayed has been resolved successfully or unsuccessfully. If the "CheckIfExists" property is set, invalid list items are removed automatically.
- The "EShellBrowserError" that is used to indicate errors inside ShellBrowser components now inherits from EOSError.
- TJamItemIdList: The WindowsPointer is now resolved lazily. This means that the existence of a path or the validity of an ItemIdList is not checked when the ItemIdList is created but only when it is required (e.g. when calling TJamItemIdList.IsInvalid).
- Bugfix - TJamShellTree: The special folder "Documents" was sometimes added a second time beneath "This PC" on Windows 10. This has been resolved.
- Bugfix - TJamShellBreadCrumbbar: Several painting issues have been fixed. The drop-down menu of "This PC" is now sorted like in Windows Explorer.
- Bugfix - TJamDriveList: An EInvalidOperationException that occurred when double-clicking a non-existing path in the DriveList is now suppressed.
- Bugfix - TJamShellTree, TJamDriveList: Checking elements wasn't possible via mouse input, when the ShellTree displayed a horizontal scrollbar on Windows Server 2008. This has been fixed. The click area of checkboxes in the DriveList has been readjusted.
- Bugfix - TJamShellList, TJamFileList, TJamDriveList: Default column widths now respect system scaling.
- Bugfix - TJamFilePreview: Problems with Foxit PreviewHandler have been resolved. Issues regarding the specification of the "Path" property at program start or in designer have been fixed.
- Bugfix - TJamExplorerBrowser: The "CreateDir" method has been fixed to name the new directory correctly.
- Bugfix - TJamShellTree: The ShellTree wasn't reliably refreshed automatically when an iPhone was attached to or detached from the machine. This now works correctly.
- Bugfixes have been incorporated in the API help.
- Several minor fixes and improvements have been incorporated.
05/11/2016
Version 10.1
- TJamExplorerBrowser: The new component "TJamExplorerBrowser" representing a configurable Explorer pane is now available. See sample projects for more information.
New features have been made available for the TJamSystemShellView:
- Implemented Columns feature:
- Added property Columns which makes it possible to add, remove, rename, sort and change the width of columns in the view style "details".
- Option to create a TStringList of only visible or all available column captions in the current folder.
- Added property ColumnHeader to influence the visibility of the column headers.
- Implemented CheckSelect feature:
- Added property AutoCheckSelect to display checkboxes for each item.
- Option to manually check or uncheck items.
- Option to list checked items.
- Added property EmptyText to show a user-defined text when view is empty.
- Implemented grouping feature:
- Group items according to different attributes.
- Added "MoveBack()" and "MoveForward()" methods to navigate the history of visited folders. Navigation by additional mouse thumb keys is also supported.
- Added new events:
- OnNavigationImpossible: Occurs when e.g. a corrupted library should be opened.
- OnNavigationCompleted: Occurs when a path was successfully opened.
- OnSelectionChanged: Occurs when the selection of items has changed.
- OnDefaultAction: Occurs when the user performs a double click or hits the enter key.
- Added property IconDimensions to let the view show icons in specific pixel dimensions. This property replaces the "IconSize" property, that is still available but not visible in object inspector anymore.
- The performance of the "SmartRefresh()" method has been improved.
- Implemented IDE property value editor for property Path. Users can now select a new path using a "browse for folder" dialog.
- It is now possible to set a new installation directory during setup. Users can now keep different versions of ShellBrowser.
- TJamShellList, TJamShellTree: The "OnShellDragOver" event can now be used to support drag-and-drop for items that aren't supported by the shell. You can now implement custom behavior for certain actions, e.g. if a PDF file is dropped on another PDF file. See TJamShellList.OnShellDragOver for an example. Please note that this might be a breaking change of your existing functionality. Changing the CopyMode parameter to a different value than cmNone will treat and visualize items as valid drop targets. See TJamShellList.OnShellDragOver for details.
- TJamShellList, TJamShellTree: Elements in the "Control Panel" item are now handled like files and are opened externally instead of navigating them internally.
- TJamShellList, TJamFileList, TJamDriveList: The "OnCreateItemClass" event is now published and visible in the object inspector.
- TJamSystemshellView: The "IconSize" property has been replaced by a new "IconDimensions" property that enables users to specify the size of icons in pixels. Setting the deprecated "IconSize" property will automatically map to the new property. However querying the IconSize is not possible anymore, so this might be a breaking change.
- TJamShellBreadCrumbBar: The component will refresh itself automatically with the new "AutomaticRefresh" property when a displayed folder is deleted or renamed.
- TJamShellTree: The performance of expanding folders containing a large amount of subfolders has been improved.
- Bugfix: A potential Access Violation occurring on unloading the ShellBrowser components has been fixed.
- Bugfix - TJamFilePreview: Setting the "Path" property at designtime now works as expected. Assigning a new parent of the TJamFilePreview at runtime will keep the currently previewed file. Repainting issues especially concerning MSG files have been fixed.
- Bugfix - TJamShellList: Copying and pasting files using the context menu now works correctly (also via RDP). It is no longer possible to move the "Name" column from the first position
- Bugfix - TJamThumbnailImage: A cropping issue depending on the size of the component has been fixed.
- Several minor fixes and improvements have been incorporated.
01/18/2016
Version 10.0
- Support for RAD Studio 10 Seattle has been added.
- The compatibility with Windows 10 has been improved.
- The support for Delphi 7 to XE2 has been dropped in V10. V9 will be maintained in the future and still support Delphi 7 to XE2. However, no new features will be added, only bugfixes will be included in V9.
- A set of standard actions enabling users to perform shell operations to our controls or to show dialogs without writing code has been added.
- Drag & drop improvements: For TJamShellList and TJamShellTree an event OnShellDragOver has been aded and the value set in the property CopyMode is now visualized in the drag cursor.
- A few minor issues with column handling in TJamShellList and TJamFileList have been fixed.
- TJamPathLabel now shows the corresponding icon left of the path as well as the Explorer context menu when right-clicking. These new features can be turned off using the new properties ShowIcon and ShellContextMenu.
- When the window handle of the TJamShellTree is being recreated multiple roots are now added again automatically. This applies if the property MultipleRoots was set to mrMultipleRoots.
- The packages for RAD Studio XE3 and XE4 have been split into designtime and runtime package, as this was the case already for XE5 and later. This is a breaking change if you have deployed ShellBrowser as runtime package or use packages that have a dependency on the ShellBrower package.
- The AutoAdjustColumnWidths method that can be used for the TJamShellList and TJamFileList to automatically adjust column widths is now also applied in ViewStyle vsList.
- Several minor fixes and improvements have been incorporated.
09/30/2015