ItemProp Unit v3.54

Description:
  A unit to provide access to a file's context menu, properties dialog, and
  default action. Given only a filename, the context menu or properties dialog
  can be displayed, or the default action taken (i.e. Open).  This hides the
  messy parts of using the Shell Namespace API.


Contact Information:
  The lateset version will always be available on the web at:
    http://www.delphifreestuff.com
  If you have any questions, comments or suggestions, please use the Delphi
  Free Stuff Support Forum at:
    http://www.delphifreestuff.com/discus/
  If, for some reason, you can not use the web-based support forum, you can
  email me at bstowers@delphifreestuff.com.  However, the support forum will
  always take precedence over direct email since it provides a resource that
  others can use when they have a problem.  Every message posted to the forum
  is emailed directly to this account, so emailing me directly will not get
  your message to me any faster.  It will only make the message less important
  for me to respond to since only one person (you) is benefiting from it
  instead of everyone interested.  Having said all that, please do email me
  directly if it is regarding something that isn't really support related,
  i.e. just to say thanks (as novel as that idea is).


Credits:
  * Many thanks to Matt Ginzton for his help with the multiple item support.  I
    had been having no luck at all with it for a long time and he was kind
    enough to provide me with working C++ code to translate.  Turns out my
    attempts had been right all along, I simply had a parameter declared
    incorrectly.  Still, I probably would have never found it without good,
    working code to start from.


Known Issues (bugs):
  * The functions which take multiple files in a TStringList parameter will not
    work unless they share a common directory (passed in the Directory param).
    This means that as long as the files exist on the same drive, it will work
    (the root of the common drive is the Directory param).  But, if the files
    are on different drives, it will not work (passing '' in Directory).  I've
    spent several hours trying to make it work, but have had no luck at all. 


Revision History:
3.54:  + Uninitialized var parameter was causing some things to fail (like
         property dialogs for drives).
       + Fixed a problem on Win2000 systems.
       + Updated for Delphi 6 compatibility.
3.53:  + Updated for C++Builder 5 compatibility.
3.52:  + DisplayPropertiesDialog might not have worked on Windows 2000.  It
         appears that one of the API calls involved isn't working correctly on
         Win2K.  I've implemented a work-around.
3.51:  + Had some problems with the Application.Hint code throwing range check
         exceptions.  Think I've got it straightened out now.
3.50:  + Daniel U. Thibault added the ability to set Application.Hint based on
         the selected context menu item's verb (name) and help text.  The verb
         is the short hint, the help text is the long hint.  See the updated
         demo for an example of using this.  Very cool, and many thanks to him
         for sharing.  Argh.  I've just discovered that Praful Kapadia also
         sent me code to do the same thing.  Thanks to him as well.
       + I've added two new boolean parameters to all of the DisplayContextMenu
         functions:  ShowRename and RenameSelected.  ShowRename indicates
         whether the Rename context menu item should be shown on the menu or
         not.  RenameSelected is a var parameter that, upon return from the
         function, indicates whether the user picked the rename function.  The
         Rename menu item is special because the context menu has no idea how
         to show user interface for renaming something, or even how to do it
         (the thing may not be a file, it could be a virtual folder).  So,
         it doesn't even attempt to handle the situation, you must.  Also,
         ShowRename only cause the Rename item to appear on the context menu
         if the item reports that it can be renamed (i.e. 'C:\' can not be
         renamed, so the item wouldn't show up for it regardless of ShowRename's
         value).
3.12:  + Updated for C++Builder 4 compatibility.
3.11:  + Under certain circumstances, trying to perform the default action on
         a file that didn't have one could cause access violations.  Fixed.
3.10:  + Added PeformVerb functions.  Allows you to peform any action that is
         supported by the system.  For example, the properties dialog is
         displayed by performing the verb 'properties'.  Other common verbs are
         'delete', 'cut', 'copy', etc.
3.00:  + Support for multiple items in all functions.  All items must be in the
         same directory.
         * The "normal" functions (those that take filenames) can now contain
           wildcards.
         * New "list" functions that operate like the "normal" functions, but
           take a Path parameter and a TStringList of items in that directory
           to operate on.
         * The "PIDL" functions now require an extra parameter to indicate the
           number of PIDLs being passed.  Simply pass the first PIDL in your
           array as the PIDL parameter.
2.21:  + Cut and Copy context menu commands now work properly on all
         installations.  Many thanks to Matt Ginzton <magi@cs.stanford.edu> for
         figuring this out and letting me know the solution (OLEInitialize).
2.20:  + Rewrite for Delphi 4 compatibility and features (overloaded funcs). 
       + Added support for IContextMenu3.                                    
2.10:  + Added new versions of all functions that accept PIDLs instead of
         filenames.  If you don't know what a PIDL is, then you don't need
         these functions.  There useful when you are fooling around with the
         Shell Namespace API functions.
2.00:  + Send To menu now works.  Thanks to Matt Ginzton
         (magi@cs.stanford.edu) for sending me C++ code snippet.
1.03:  + Some code clean up.
       + Really works with C++Builder now. Thanks again to Michael Trier.
1.02:  + Small change for C++Builder compatibility.  Thanks to Michael Trier.
1.01:  + Updated for Delphi 3 compatibility.
       + Now works properly with drives.  Just pass something like C:\, but
         NOT C:
1.00:  + Initial release
