Dear customers, thank you very much for your patience
in waiting for this release. I believe that all new features will justify
your expectations.
The following table is a list of all features which were
implemented since 2.2b
release:
Shell+ MegaDemo example
This demo will show you how to implement virtual
file storage, based on client-server technology. This program allows
you to store different files inside the single database file and provide
the following features:
- Create folders and subfolders
- Drag&Drop files and folders from filesystem and other namespace
extensions
- Drag&Drop files and folders to filesystem and other namespace
extensions
- Delete and Rename virtual files and folders
- Set read-only attribute to virtual files
- Display overlay icon for files (read-only state)
- Add menu items to Explorer menu
- Add buttons to Explorer toolbar
- Display custom Properties dialog for folders and files (including
original system Security page)
- Login dialog with timeout for logout
- Common dialogs support (Open/SaveAs)
Please learn more about this demo here.
XP themes for shell property
pages
Since this version your property page extensions
support Windows XP themes. They can be enabled or disabled by ActivateXPThemes
property on the property page component. All native Delphi components
will support visual themes without any additional work.
Global and Local
Shell change notifiers
Explorer always display up-to-date file list
in all opened windows on the desktop. This is possible because Explorer
and shell extensions used Shell Change Notifiers. Unfortunately it does
not make development process more ease, because NSE dll will be loaded
to global Explorer process and does not unloaded until you restart
it. As an alternative way (only with Shell+) you can use Local Change
Notifiers. Explorer will reflect changes only in current Explorer window,
which is enough while you develop NSE. You can switch between change notification
modes using ChangeNotifyType property of ShellView component.
Overlay icons for
namespace extensions
You can display overlay icons for any file and
folder types in your namespace extension. To do that you have to put two
TSxIconList components on the PermanentModule and connect them
to DataProvider.LargeOverlayIcons and DataProvider.SmallOverlayIcons
properties. These two icon lists will contain images for large (32x32)
and small (16x16) icons.
Then you will handle OnGetOverlayIndex
event for DataProvider component:
procedure TPermanentModule.DataProviderGetOverlayIndex(
Sender: TSxCustomProvider; DataGrain: TSxCustomDataGrain;
var OverlayIndex: Integer; var DisplayOverlay: Boolean);
begin
OverlayIndex:=0;
if ftReadOnly in DataGrain.Attributes then
DisplayOverlay:=True
else
DisplayOverlay:=False;
end;
|
You have to specify OverlayIndex param with
icon index from SxIconList component and set DisplayOverlay param
to True if you want to display specified overlay icon for current grain,
which specified by DataGrain parameter.
System icons with
ease
Since this version you can display system icons
for your NSE folders and files with ease, just handle DataProvider.PrepareGrainApperance
event by the following way:
procedure TPermanentModule.DataProviderPrepareGrainApperance(
Sender: TSxCustomProvider; DataGrain: TSxCustomDataGrain;
var IconParams: TSxPrepareIconParams);
begin
IconParams.UseSystemIcon:=DataGrain.Strings.Values[vSysIconOnly]='1';
end;
|
File or folder specified by DataGrain
parameter. When IconParams.UseSystemIcon equals True, Shell+ will
display DataGrain with filesystem icons, obtained by its filename extension
(retrieved from DataGrain.Name property).
Different styles in toolbar
buttons
Since Windows 2000 some buttons on
the Explorer toolbar may be displayed with caption text:
To allow button to display its caption
on the Explorer toolbar you have to set ShowRightText property
to True.
System progress
dialog support
During operations with virtual files and folders
Shell+ will automatically display system progress dialog:
But in some cases you may want to
disable displaying of this dialog, for example - if you want to display
your own progress dialog. It is possible with new
DataProvider events:
procedure TShellImpl.ProviderNewGrainFromFileEx(Sender: TSxCustomProvider;
FolderGrain: TSxCustomDataGrain; FileName: WideString;
var NewGrain: TSxCustomDataGrain; var DropInfo: TSxDropInfo);
begin
DropInfo.ProgressDialog.StopProgressDialog; .....
|
Strong Fileclass
registration with TSxFileClasses component
Sometimes, working with common fileclasses
may cause some problems for developers. For example: on your development
machine ".jpg" file extension registered to "jpegfile"
fileclass, but on another machine, where installed some thirdparty products
like Adobe Photoshop, this extension may be registered to "Photoshop.JPEGFile"
fileclass. Shell+ will handle this problem automatically and your shell
extension will be registered under "Photoshop.JPEGFile" fileclass.
But when you need to revert file extension registration to specified fileclass
(like "jpegfile") you have to set the TSxFileClass.StrongRegistration
property to True.
URL Handler component
TSxURLHandler component used to translate
addresses of unknown URL protocols. Using this component you can monitor
any unknown URLs which user type in Internet Explorer, modify it and pass
to Internet Explorer again. The only event you have to handle is OnTranslate:
procedure TMainSxModule.SxURLHandlerTranslate(Sender: TsxCustomURLHandler;
var URL: WideString; var Result: TSxUrlHandlerResult);
begin
if Result<>urlPartial then
begin
URL:='http://www.google.com/search?q='+StringReplace(URL, ' ', '+', [rfReplaceAll])+'&btnI=I''m+Feeling+Lucky';
Result:=urlComplete;
end;
end;
|
Using URLHandler component
for NSE purposes
URL handlers is very useful to use with namespace
extensions. Usually, complete NSE path look like ::{GUID1}\::{GUID2}\FolderA\FolderB\...,
but after you configure appropriate properties in TSxVirtualFolder component
this path will look like [test]\FolderA\FolderB\...
This feature enabled by the following properties
of TSxVirtualFolder component:
- TSxVirtualFolder.URLHandler.Active - enable or disable URL
translation
- TSxVirtualFolder.CLSID - GUID of URLHandler object
- TSxVirtualFolder.URLIdentifier - text string, which used to
substitute system-related part of URL to your NSE
Extra-Property pages
for NSEs
Since this version you can connect any number
of additional property pages to your TSxNamespacePropertySheet
component using ExtraPages property. This may be your own extensions,
any thirdparty extensions or system native property pages. You are welcome
to contact us if you
need to use any existent property page with your NSE.
Windows Security
property page
One of Extra-Property pages, which currently
implemented in Shell+ is a native Security Property Page for your namespace
extensions. You just need to place TSxExtraSecurityPropPage component
on the PermanentModule and connect it to the ExtraPages property
of TSxNamespacePropertySheet component. You have to handle several
events to provide information to this component:
TSxNamespacePropertySheet event
|
Event description
|
OnGetAccessRights |
Requests the list of system-defined access rights,
which will be requested from security descriptor.
|
OnGetGenericMapping |
Requests the generic access rights in an access mask
which will be mapped to their corresponding standard and specific
access rights. |
OnGetSecurityDescriptor |
Requests the security descriptor of edited object. |
OnPrepareSettings |
Requests different settings for security property page:
Title, ReadOnly, AdvancedPermissions etc. |
OnSetSecurityDescriptor |
When Apply or Ok button clicked, this event is called
and you receive security descriptor, which was modified by user on
this page. |
Please use MSDN to get more information about
Security Descriptors and Access Rights. Also you can use SvCom
(http://www.aldyn-software.com)
to manage Security Descriptors and other related stuff by native Delphi
way.
Property page extensions
for your namespace extensions
Another kind of extra-property pages is your
own property page extensions for namespace extensions. This means that
you can extend functionality of your Namespace extension without modifying
its code and binary files (plugins) and you can extend your virtual files
and folders with any thirdparty pages. The only thing you need to know
- is thirdpardy propery page CLSID.
To implement property page extension to your
NSE you have to put the TSxGrainExtensionPage component on the
PermanentModule and link it to the ExtraPages property of TSxNamespacePropertySheet
component. Then you have to specify what extensions to use or where to
get this information:
TSxGrainExtensionPage property
|
Property description
|
KnownExtensionsList |
The list of CLSIDs of known property sheet shell
extensions. You can specify here any CLSID of previously developed
or thirdparty extension.
|
RegistryLocation.CanCreate |
When registry path, specified by LocationPath does not
exists and CanCreate equals True, this path will be created in the
Registry. |
RegistryLocation.LocationPath |
Specifies the path in the Registry, where to locate
the list of extensions. For example: "*\shellex\PropertySheetHandlers" |
RegistryLocation.RootKey |
Specifies Registry root key: sxHKEY_CLASSES_ROOT, sxHKEY_CURRENT_USER,
etc. |
Built-in error handler
Since this version Shell+ have own exceptions
handler: TSxExceptionController component. You can handle exceptions
manually or use existent way to display them. Shell+ will provide additional
information about exception source and allow to suppress it or pass to
Explorer. Unfortunately Explorer does not handle exceptions, it just ask
to restart it and send exception information to Microsoft.
New DataProvider
events
This version introduce several useful events
for TSxProvider component. They are:
TSxProvider event
|
Event description
|
OnConfirmDelete |
Provide easy way to check delete permissions for
your virtual file or folder and display confirmation dialog.
|
OnDataGrainDropEx |
Provide additional information to handle Drag&Drop
operation. Please read more about TSxDropInfo structure below. |
OnGetGrainID |
Allows you to improve your NSE performance. You have
to specify any unique value, which identifies entity in your database
or any other storage. |
OnNewGrainFromFileEx |
Provide additional information to handle Drag&Drop
operation. Please read more about TSxDropInfo structure below. |
OnNewGrainFromPidlEx |
Provide additional information to handle Drag&Drop
operation. Please read more about TSxDropInfo structure below. |
OnNewGrainFromStreamEx |
Provide additional information to handle Drag&Drop
operation. Please read more about TSxDropInfo structure below. |
OnPrepareGrainApperance |
Allows you to improve your NSE performance by specifying
what your virtual objects will use system defined icons. |
TSxDropInfo structure used with new DataProvider
events to specify additional information about Drag&Drop operations:
Record entry
|
Entry description
|
DropEffect |
Specifies the kind of operation what performed with
DataGrain (Copy, Move, etc.)
|
ProgressDialogWnd |
Specifies the HWND value of operation progress dialog. |
ExplorerWnd |
Specifies the HWND value of Explorer window, where this
operation has performed. |
ProgressDialog |
Contains reference to IProgressDialog interface of operation
progress dialog. |
Shell debugging tool
Also released new version of ShellReset tool.
It allows you to set/remove debugging options for Explorer and restart
it by one click. You can download ShellReset from our Registered Users
Area.
|