Since this version you can add custom and common menu
items to Explorer's main menu. The most common usage of this feature
is adding your menu items to the View menu. As usual it's easy to
implement: you will put TSxExplorerMenu component to your main SxModule
and connect it to ShellView component:
After you have to specify the list of
menu items and their locations in Explorer menu. TSxExplorerMenu
component provides several properties: File, Edit, View and so on.
Each property corresponds to appropriate menu item in the Explorer's
main menu. You can add any number of items.
Each item contain a link to the TMenuItem
object. You can use any menu component to store your menu items.
This component can be located at the ShellViewForm (if you use TSxFormShellView)
or at the PermanentModule.
Also each item contain NoFocusBehaviour
property. It controls item state depending on ShellView focused
state. You can disable or hide item, when ShellView not focused.
Adding
buttons to the Explorer's toolbar
Another common task for NSE developers
is adding custom buttons to the Explorer's toolbar. Development
process is similar to adding menu items to the Explorer's menu.
You have to put the TSxExplorerToolbar component on the main SxModule
and connect it to the ShellView component:
TSxExplorerToolbar component have only
one property to specify the list of buttons. It's a Buttons property.
For each button have to specify the MenuItem link, style, image
and tooltip information. Unfortunately in 2.2b version you cannot
add your own image to the toolbar, but we hope to get rid of this
problem in the next version. MenuItemLink property used as like
as the same property for TSxExplorerMenu component.
New common
verbs: Rename and Delete
Rename and Delete are common verbs for
items in the Windows Shell. Generally you will only implement appropriate
event handlers for DataProvider component. But in some cases you
can override behaviour of these items.
Since this version added two event for
supporting Rename verb: OnQueryRenameGrain and OnRenameDataGrain.
Using OnQueryRenameGrain event you can deny or allow displaying
of 'Rename' menu item in the context menu for specified DataGrain.
OnRenameDataGrain called when used has performed renaming
specified DataGrain. In this event handler you will assign new name
for your DataGrain or modify record in your database:
procedure TFormPermanentModule.SxSimpleTreeProviderRenameDataGrain(
Sender: TSxCustomProvider; ParentGrain, DataGrain: TSxCustomDataGrain;
var NewName: WideString; var PerformRename: Boolean);
var
permanentGrain:TSxSimpleTreeDataGrain;
begin
permanentGrain:=TSxSimpleTreeProvider(Sender). LocatePermanentGrain(TSxSimpleTreeDataGrain(DataGrain).GUID);
permanentGrain.Name:=NewName;
PerformRename:=True;
end;
To deny or allow displaying of 'Delete'
verb you can handle OnQueryDeleteGrain. To handle delete
operations you will implement OnHandleDelete event:
procedure TPermanentModule.SxSimpleTreeProviderHandleDelete(
Sender: TSxCustomProvider; DataGrain: TSxCustomDataGrain);
begin
TSxSimpleTreeProvider(Sender).DeletePermanentGrain(DataGrain);
end;
Local
and global Windows Shell notifications
This version of Shell+ handles Shell
Notifications. This means that all your NSE's windows will be updated
automatically when any operation takes place (new file, create,
delete etc.)
There are two kinds of Shell Notifications:
Local and Global. Local notifications handled only inside the current
Explorer instance, but they does not lock your DLL and this helps
you to debug your namespace extension. Global notifications working
across all Explorer instances, but to make it possible, your NSE's
DLL will be loaded to global Explorer instance and will be unloaded
only with Windows shutdown.
You can specify required notification
kind using ShellView.ChangeNotifyType property.
New events
for shell and Namespace extension components
Since last versions we've added several
new events for DataProvider and other Shell extension components.
New Provider events described in updated article "Writing
data handling events for DataProvider". Other new events
described in this article:
OnGetShellView
event - specify custom ShellView for any folder in your namespace
OnSortColumn
and OnSort events - allow you
to perform custom sorting by different columns
OnViewStyleChange
- occurs when user changed view style of current window
OnSelectionChanged
- occurs when SelectedGrain and SelectedGrainList properties were
changed
OnGetShellView
event exposed by TSxShellFolder component successors. You can
specify different views for any of your folder grains. Just
set any of your ShellViews to NewShellView parameter.
OnSortColumn event
exposed by TSxNamespaceDetails component. You receive two DataGrains
as parameter and reference to column to compare. You will compare
these DataGrains and return result using Result parameter. Use
table below to make a result value.
OnSort event exposed
by TSxNamespaceColumn class. As like to OnSortColumn event you
will receive two DataGrains and return result using Result parameter.
Use the following table to make a result value:
Condition
Result
DataGrain1 = DataGrain2
= 0
DataGrain1 > DataGrain2
> 0
DataGrain1 < DataGrain2
< 0
Extended
PropertySheet events - since this version in addition
to existent events to TsxShellPropSheetExt component were implemented
several new events: OnApplyEx, OnKillActiveEx, OnSetActiveEx and
OnQueryCancelEx. The only difference from previous analogues -
additional parameters, that makes handling of these events more
ease.
OnViewStyleChange
event exposed by TSxShellViewForm component. It is occurs when
user changed current view style (List, Large Icons etc.)
procedure TExampleShellViewForm.SxShellViewFormViewStyleChange(
Sender: TSxShellViewForm);
begincase ViewStyle of
svsIcon: begin
SxShellListControl.ViewStyle:=vsIcon;
miLargeIcons.Checked:=True;
end;
svsSmallIcon: begin
SxShellListControl.ViewStyle:=vsSmallIcon;
miSmallIcons.Checked:=True;
end;
svsDetails: begin
SxShellListControl.ViewStyle:=vsReport;
miDetails.Checked:=True;
end;
svsList: begin
SxShellListControl.ViewStyle:=vsList;
miList.Checked:=True;
end;
end;
end;
OnSelectionChanged
event exposed by TSxShellViewForm and occurs when properties SelectedDataGrain
and SelectedGrainsList was changed. These properties modified
automatically by TSxShellListControl component or you can control
them manually.
Common
columns support for TSxColumnProvider component
Since Windows 2000 you can specify different
text properties for any file on your disks. This properties can
be displayed as additional columns for each folder:
On this picture the "Title"
column contains data from first line of approciate file.
You can map your data to one of common
columns using TShellColumn.ColumnLink property.
Code examples for this
article
ShellViewForm example demonstrates, how to
implement:
NSE contents with TSxSimpleTreeProvider component
Flexible custom ShellView using TSxShellFormView component
Clipboard operations
Drag'n'Drop operations to and from namespace extension
Accessing your namespace extension from Common Dialogs
Adding property sheets to the root and data grains of your NSE
Addign own menu items to Explorer's menu
Addign button to Explorer's toolbar