├── .gitignore ├── CBuilder ├── Alexandria │ ├── CBuilder.groupproj │ ├── VirtualShellToolsC.cbproj │ ├── VirtualShellToolsC.cpp │ ├── VirtualShellToolsC.ico │ ├── VirtualShellToolsCD.cbproj │ ├── VirtualShellToolsCD.cpp │ └── VirtualShellToolsCD.ico ├── Rio │ ├── CBuilder.groupproj │ ├── VirtualShellToolsC.cbproj │ ├── VirtualShellToolsC.cpp │ ├── VirtualShellToolsC.ico │ ├── VirtualShellToolsCD.cbproj │ ├── VirtualShellToolsCD.cpp │ └── VirtualShellToolsCD.ico └── Sydney │ ├── CBuilder.groupproj │ ├── VirtualShellToolsC.cbproj │ ├── VirtualShellToolsC.cpp │ ├── VirtualShellToolsC.ico │ ├── VirtualShellToolsCD.cbproj │ ├── VirtualShellToolsCD.cpp │ └── VirtualShellToolsCD.ico ├── Delphi ├── Rio │ ├── Delphi.groupproj │ ├── VirtualShellToolsD.dpk │ ├── VirtualShellToolsD.dproj │ ├── VirtualShellToolsDD.dpk │ └── VirtualShellToolsDD.dproj └── Syndey+ │ ├── VirtualShellToolsD.dpk │ ├── VirtualShellToolsDD.dpk │ └── readme.md ├── Demos ├── Adding Custom Columns Using ShellDetails │ ├── ShellDetailsCustomColumns.dpr │ ├── ShellDetailsCustomColumns.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Applet and Wizard Launcher │ ├── AppletWizardLauncher.dpr │ ├── AppletWizardLauncher.res │ ├── Unit1.dfm │ └── Unit1.pas ├── AutoComplete Component │ ├── AutoCompleteComponentProject.dpr │ ├── AutoCompleteComponentProject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── AutoCompleteObject │ ├── AutoCompleteObject.dpr │ ├── AutoCompleteObject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Backgnd Menu │ ├── BkGndMenuProject.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── CheckBoxes │ ├── CheckBoxes.dpr │ ├── CheckBoxes.res │ ├── TEST.TXT │ ├── Unit1.dfm │ └── Unit1.pas ├── Custom Columns │ ├── CustomColumnProject.dpr │ ├── CustomColumnProject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Custom Sorting │ ├── CustomSortProject.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── DOS Shell CommandLine │ ├── DOSCommandLineProject.dpr │ ├── DOSCommandLineProject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Explorer CheckBoxes │ ├── ExplorerCheckboxes.dpr │ ├── ExplorerCheckboxes.res │ ├── InfoForm.dfm │ ├── InfoForm.pas │ ├── Tree.dat │ ├── Unit1.dfm │ ├── Unit1.pas │ └── VirtualCheckboxesSynchronizer.pas ├── File Search │ ├── FileSearch.dpr │ ├── FindFile.pas │ ├── ReadMe.txt │ ├── uWndSearchFiles.dfm │ └── uWndSearchFiles.pas ├── FileSearch │ ├── FileSearchProject.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── FolderSize │ ├── FolderSizeDemo.dpr │ ├── FolderSizeDemo.res │ ├── Unit1.dfm │ └── Unit1.pas ├── KnownFolders │ ├── KnwonwFoldersProject.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── Namespace Browser │ ├── NamespaceBrowserProject.dpr │ ├── NamespaceBrowserProject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Overview │ ├── InfoForm.dfm │ ├── InfoForm.pas │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── VET.dpr │ ├── VET.dproj │ ├── VET.res │ └── VETBkgnd.bmp ├── PrevDirNode EasyListview │ ├── EasyListviewPrevFolderProject.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── PrevDirNode │ ├── Project1.dpr │ ├── Project1.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Readme.txt ├── SendTo Menu │ ├── Back.bmp │ ├── Fwd.bmp │ ├── SendToMenuProject.dpr │ ├── SendToMenuProject.res │ ├── Unit1.dfm │ ├── Unit1.pas │ └── folder.bmp ├── Shell History │ ├── ShellHistory.dpr │ ├── ShellHistory.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Shell Link Shortcuts │ ├── ShellLinkShortcuts.dpr │ ├── ShellLinkShortcuts.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Shell Notify │ ├── ShellNotify.dpr │ ├── ShellNotify.res │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── Unit2.dfm │ └── Unit2.pas ├── ShellColumn State Storing │ ├── ShellColumnStateStoring.dpr │ ├── ShellColumnStateStoring.res │ ├── Unit1.dfm │ └── Unit1.pas ├── ShellNew (New File) Menu │ ├── ShellNew_NewFileMenu.dpr │ ├── ShellNew_NewFileMenu.res │ ├── Unit1.dfm │ └── Unit1.pas ├── ShellToolbars │ ├── ShellToolbars.dpr │ ├── Unit1.dfm │ └── Unit1.pas ├── User Data │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── UserDataProject.dpr │ ├── UserDataProject.dsk │ └── UserDataProject.res ├── Vertical Icons Custom Draw │ ├── ProjectVerticalIcons.dpr │ ├── ProjectVerticalIcons.res │ ├── Unit1.dfm │ └── Unit1.pas ├── Virtual Explorer │ ├── About.dfm │ ├── About.pas │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── VST Logo 1.bmp │ └── VirtualExplorer.dpr ├── VirtualDropStack │ ├── DropStackProject.dpr │ ├── DropStackProject.res │ ├── Unit1.dfm │ └── Unit1.pas ├── VirtualEasyListModeView │ ├── EasyListModeViewProjectGroup.bpg │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── VirtualExplorerListModeViewProject.dpr │ └── VirtualExplorerListModeViewProject.res ├── VirtualEasyListviewCustomContextMenu │ ├── Unit1.dfm │ ├── Unit1.pas │ └── VirtaulExplorerEasyListviewMEnuProject.dpr ├── VirtualExplorerEasyListview │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── VEasyListviewProject.dpr │ └── VEasyListviewProject.res ├── VirtualShellToolsDemos.bpg └── Wow64 File Redirection │ ├── Unit1.dfm │ ├── Unit1.pas │ ├── Wow64FileRedirection.dpr │ └── Wow64FileRedirection.res ├── Design ├── VirtualShellToolsReg.dcr └── VirtualShellToolsReg.pas ├── Docs ├── CBuilder 6 Issues.txt ├── Unicode Compatibilty.txt ├── VirtualShellTools History.txt └── Whats New.txt ├── Include ├── Addins.inc └── uxtheme.h ├── LICENCE ├── Resources └── Images │ ├── Bkgnd.bmp │ ├── Folder Funnel 24x24.bmp │ ├── Setup Gear 24x24.bmp │ ├── Setup Gear 32x32.bmp │ ├── VET_Logo.png │ ├── ViewButton.bmp │ ├── XDisk.bmp │ ├── XPBackArrow 24x24.bmp │ ├── XPBackArrow.bmp │ ├── XPFolders 16x16.bmp │ ├── XPFolders 24x24.bmp │ ├── XPFolders.bmp │ ├── XPHistory 16x16.bmp │ ├── XPHistory 24x24.bmp │ ├── XPListviewStyle.bmp │ ├── XPNextArrow 24x24.bmp │ ├── XPNextArrow.bmp │ ├── XPSearch 24x24.bmp │ ├── XPSearch.bmp │ ├── XPSearch2.bmp │ ├── XPSearch2Small.bmp │ └── XPUpFolder.bmp ├── Source ├── AppletsAndWizards.pas ├── ColumnForm.dfm ├── ColumnForm.pas ├── ColumnFormSpTBX.pas ├── ColumnFormTBX.dfm ├── VirtualBreadCrumbBar.pas ├── VirtualCommandLine.pas ├── VirtualExplorerEasyListModeview.pas ├── VirtualExplorerEasyListview.pas ├── VirtualExplorerTree.pas ├── VirtualExplorerTreeExt.res ├── VirtualFileSearch.pas ├── VirtualRedirector.pas ├── VirtualResources.pas ├── VirtualScrollbars.pas ├── VirtualSendToMenu.pas ├── VirtualShellAutoComplete.pas ├── VirtualShellHistory.pas ├── VirtualShellNewMenu.pas ├── VirtualShellNotifier.pas ├── VirtualShellToolBar.pas └── VirtualThumbnails.pas └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled source # 2 | ################### 3 | *.dcu 4 | *.obj 5 | *.exe 6 | *.bpl 7 | *.bpi 8 | *.dcp 9 | *.rsm 10 | *.stat 11 | *.map 12 | *.lib 13 | 14 | # Generated source # 15 | ################### 16 | *.hpp 17 | 18 | # Backup files # 19 | ################### 20 | *.~* 21 | *.bak 22 | *.#00 23 | *.pch 24 | *.Patch 25 | /__history 26 | 27 | # IDE Files # 28 | ################### 29 | *.dproj.local 30 | *.groupproj.local 31 | *.identcache 32 | *.dsk 33 | *.tvsconfig 34 | *.otares 35 | *.drc 36 | *.rc 37 | *.res 38 | *.local 39 | 40 | # Output Folders # 41 | ################### 42 | /Win32 43 | /Win64 44 | /OSX32 45 | 46 | # C++ Files # 47 | ################### 48 | *.prjmgc 49 | 50 | -------------------------------------------------------------------------------- /CBuilder/Alexandria/CBuilder.groupproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {08E512AA-B6C7-4392-B232-FE72BB50BC69} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /CBuilder/Alexandria/VirtualShellToolsC.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | USEFORMNS("..\..\Source\ColumnForm.pas", Columnform, FormColumnSettings); 6 | //--------------------------------------------------------------------------- 7 | #pragma package(smart_init) 8 | //--------------------------------------------------------------------------- 9 | 10 | // Package source. 11 | //--------------------------------------------------------------------------- 12 | 13 | #pragma argsused 14 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 15 | { 16 | return 1; 17 | } 18 | //--------------------------------------------------------------------------- 19 | -------------------------------------------------------------------------------- /CBuilder/Alexandria/VirtualShellToolsC.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Alexandria/VirtualShellToolsC.ico -------------------------------------------------------------------------------- /CBuilder/Alexandria/VirtualShellToolsCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | #pragma argsused 12 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 13 | { 14 | return 1; 15 | } 16 | //--------------------------------------------------------------------------- 17 | -------------------------------------------------------------------------------- /CBuilder/Alexandria/VirtualShellToolsCD.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Alexandria/VirtualShellToolsCD.ico -------------------------------------------------------------------------------- /CBuilder/Rio/CBuilder.groupproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {08E512AA-B6C7-4392-B232-FE72BB50BC69} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /CBuilder/Rio/VirtualShellToolsC.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | USEFORMNS("..\..\Source\ColumnForm.pas", Columnform, FormColumnSettings); 6 | //--------------------------------------------------------------------------- 7 | #pragma package(smart_init) 8 | //--------------------------------------------------------------------------- 9 | 10 | // Package source. 11 | //--------------------------------------------------------------------------- 12 | 13 | #pragma argsused 14 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 15 | { 16 | return 1; 17 | } 18 | //--------------------------------------------------------------------------- 19 | -------------------------------------------------------------------------------- /CBuilder/Rio/VirtualShellToolsC.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Rio/VirtualShellToolsC.ico -------------------------------------------------------------------------------- /CBuilder/Rio/VirtualShellToolsCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | #pragma argsused 12 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 13 | { 14 | return 1; 15 | } 16 | //--------------------------------------------------------------------------- 17 | -------------------------------------------------------------------------------- /CBuilder/Rio/VirtualShellToolsCD.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Rio/VirtualShellToolsCD.ico -------------------------------------------------------------------------------- /CBuilder/Sydney/CBuilder.groupproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {08E512AA-B6C7-4392-B232-FE72BB50BC69} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /CBuilder/Sydney/VirtualShellToolsC.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | USEFORMNS("..\..\Source\ColumnForm.pas", Columnform, FormColumnSettings); 6 | //--------------------------------------------------------------------------- 7 | #pragma package(smart_init) 8 | //--------------------------------------------------------------------------- 9 | 10 | // Package source. 11 | //--------------------------------------------------------------------------- 12 | 13 | #pragma argsused 14 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 15 | { 16 | return 1; 17 | } 18 | //--------------------------------------------------------------------------- 19 | -------------------------------------------------------------------------------- /CBuilder/Sydney/VirtualShellToolsC.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Sydney/VirtualShellToolsC.ico -------------------------------------------------------------------------------- /CBuilder/Sydney/VirtualShellToolsCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | #pragma argsused 12 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 13 | { 14 | return 1; 15 | } 16 | //--------------------------------------------------------------------------- 17 | -------------------------------------------------------------------------------- /CBuilder/Sydney/VirtualShellToolsCD.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/CBuilder/Sydney/VirtualShellToolsCD.ico -------------------------------------------------------------------------------- /Delphi/Rio/Delphi.groupproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {89D072DB-A12D-432C-B37E-6B8989CE4962} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Delphi/Rio/VirtualShellToolsD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualShellToolsD; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'VirtualShellTools Delphi Runtime Package'} 29 | {$LIBSUFFIX '260'} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | rtl, 35 | vcl, 36 | vclimg, 37 | EasyListviewD, 38 | MPCommonLibD, 39 | VirtualTreesR; 40 | 41 | contains 42 | AppletsAndWizards in '..\..\Source\AppletsAndWizards.pas', 43 | VirtualCommandLine in '..\..\Source\VirtualCommandLine.pas', 44 | VirtualExplorerTree in '..\..\Source\VirtualExplorerTree.pas', 45 | VirtualRedirector in '..\..\Source\VirtualRedirector.pas', 46 | VirtualResources in '..\..\Source\VirtualResources.pas', 47 | VirtualScrollbars in '..\..\Source\VirtualScrollbars.pas', 48 | VirtualSendToMenu in '..\..\Source\VirtualSendToMenu.pas', 49 | VirtualShellAutoComplete in '..\..\Source\VirtualShellAutoComplete.pas', 50 | VirtualShellHistory in '..\..\Source\VirtualShellHistory.pas', 51 | VirtualShellNewMenu in '..\..\Source\VirtualShellNewMenu.pas', 52 | VirtualShellNotifier in '..\..\Source\VirtualShellNotifier.pas', 53 | VirtualShellToolBar in '..\..\Source\VirtualShellToolBar.pas', 54 | VirtualThumbnails in '..\..\Source\VirtualThumbnails.pas', 55 | VirtualExplorerEasyListview in '..\..\Source\VirtualExplorerEasyListview.pas', 56 | VirtualExplorerEasyListModeview in '..\..\Source\VirtualExplorerEasyListModeview.pas', 57 | VirtualFileSearch in '..\..\Source\VirtualFileSearch.pas', 58 | ColumnForm in '..\..\Source\ColumnForm.pas' {FormColumnSettings}; 59 | 60 | end. 61 | -------------------------------------------------------------------------------- /Delphi/Rio/VirtualShellToolsDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualShellToolsDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\Design\VirtualShellToolsReg.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'Virtual Shell Tools Delphi Designtime Package'} 30 | {$LIBSUFFIX '260'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | vcl, 36 | rtl, 37 | designide, 38 | vclactnband, 39 | vclx, 40 | EasyListviewD, 41 | VirtualShellToolsD; 42 | 43 | contains 44 | VirtualShellToolsReg in '..\..\Design\VirtualShellToolsReg.pas'; 45 | 46 | end. 47 | -------------------------------------------------------------------------------- /Delphi/Syndey+/VirtualShellToolsD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualShellToolsD; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'VirtualShellTools Delphi Runtime Package'} 29 | {$RUNONLY} 30 | {$IMPLICITBUILD OFF} 31 | {$LIBSUFFIX AUTO} 32 | 33 | requires 34 | rtl, 35 | vcl, 36 | vclimg, 37 | EasyListviewD, 38 | MPCommonLibD, 39 | VirtualTreesR; 40 | 41 | contains 42 | AppletsAndWizards in '..\..\Source\AppletsAndWizards.pas', 43 | VirtualCommandLine in '..\..\Source\VirtualCommandLine.pas', 44 | VirtualExplorerTree in '..\..\Source\VirtualExplorerTree.pas', 45 | VirtualRedirector in '..\..\Source\VirtualRedirector.pas', 46 | VirtualResources in '..\..\Source\VirtualResources.pas', 47 | VirtualScrollbars in '..\..\Source\VirtualScrollbars.pas', 48 | VirtualSendToMenu in '..\..\Source\VirtualSendToMenu.pas', 49 | VirtualShellAutoComplete in '..\..\Source\VirtualShellAutoComplete.pas', 50 | VirtualShellHistory in '..\..\Source\VirtualShellHistory.pas', 51 | VirtualShellNewMenu in '..\..\Source\VirtualShellNewMenu.pas', 52 | VirtualShellNotifier in '..\..\Source\VirtualShellNotifier.pas', 53 | VirtualShellToolBar in '..\..\Source\VirtualShellToolBar.pas', 54 | VirtualThumbnails in '..\..\Source\VirtualThumbnails.pas', 55 | VirtualExplorerEasyListview in '..\..\Source\VirtualExplorerEasyListview.pas', 56 | VirtualExplorerEasyListModeview in '..\..\Source\VirtualExplorerEasyListModeview.pas', 57 | VirtualFileSearch in '..\..\Source\VirtualFileSearch.pas', 58 | ColumnForm in '..\..\Source\ColumnForm.pas' {FormColumnSettings}; 59 | 60 | end. 61 | -------------------------------------------------------------------------------- /Delphi/Syndey+/VirtualShellToolsDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualShellToolsDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\Design\VirtualShellToolsReg.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'Virtual Shell Tools Delphi Designtime Package'} 30 | {$LIBSUFFIX AUTO} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | vcl, 36 | rtl, 37 | designide, 38 | vclactnband, 39 | vclx, 40 | EasyListviewD, 41 | VirtualShellToolsD; 42 | 43 | contains 44 | VirtualShellToolsReg in '..\..\Design\VirtualShellToolsReg.pas'; 45 | 46 | end. 47 | -------------------------------------------------------------------------------- /Delphi/Syndey+/readme.md: -------------------------------------------------------------------------------- 1 | This directory contains alternative Delphi packages that allow VirtualShellTools to be used with the 2 | [Jam-Software version of Virtual-Treeview](https://github.com/JAM-Software/Virtual-TreeView) -------------------------------------------------------------------------------- /Demos/Adding Custom Columns Using ShellDetails/ShellDetailsCustomColumns.dpr: -------------------------------------------------------------------------------- 1 | program ShellDetailsCustomColumns; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Adding Custom Columns Using ShellDetails/ShellDetailsCustomColumns.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Adding Custom Columns Using ShellDetails/ShellDetailsCustomColumns.res -------------------------------------------------------------------------------- /Demos/Adding Custom Columns Using ShellDetails/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 534 3 | Top = 326 4 | Caption = 'Form1' 5 | ClientHeight = 463 6 | ClientWidth = 844 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object VirtualExplorerListview1: TVirtualExplorerListview 17 | Left = 0 18 | Top = 0 19 | Width = 844 20 | Height = 463 21 | Active = True 22 | Align = alClient 23 | ColumnDetails = cdShellColumns 24 | DefaultNodeHeight = 17 25 | DragHeight = 250 26 | DragWidth = 150 27 | FileObjects = [foFolders, foNonFolders, foHidden, foEnableAsync] 28 | FileSizeFormat = fsfExplorer 29 | FileSort = fsFileType 30 | Header.AutoSizeIndex = -1 31 | Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoShowSortGlyphs, hoVisible] 32 | Header.ParentFont = True 33 | Header.SortColumn = 0 34 | Header.Style = hsFlatButtons 35 | HintMode = hmHint 36 | Indent = 0 37 | ParentColor = False 38 | RootFolder = rfDesktop 39 | TabOrder = 0 40 | TabStop = True 41 | TreeOptions.AutoOptions = [toAutoScroll] 42 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toReportMode, toToggleOnDblClick] 43 | TreeOptions.PaintOptions = [toShowTreeLines, toUseBlendedImages, toGhostedIfUnfocused] 44 | TreeOptions.SelectionOptions = [toMultiSelect, toRightClickSelect, toSiblingSelectConstraint] 45 | TreeOptions.VETFolderOptions = [toHideRootFolder, toThreadedExpandMark] 46 | TreeOptions.VETShellOptions = [toRightAlignSizeColumn, toContextMenus, toShellColumnMenu] 47 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 48 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toBrowseExecuteZipFolder, toChangeNotifierThread, toExecuteOnDblClk] 49 | TreeOptions.VETImageOptions = [toImages, toThreadedImages, toMarkCutAndCopy] 50 | OnCustomColumnCompare = ExplorerListview1CustomColumnCompare 51 | OnGetVETText = ExplorerListview1GetVETText 52 | ColumnMenuItemCount = 8 53 | OnHeaderRebuild = ExplorerListview1HeaderRebuild 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /Demos/Adding Custom Columns Using ShellDetails/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 | ExtCtrls, VirtualExplorerTree, VirtualTrees, MPShellUtilities, 8 | StdCtrls; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | VirtualExplorerListview1: TVirtualExplorerListview; 13 | procedure ExplorerListview1GetVETText( 14 | Sender: TCustomVirtualExplorerTree; Column: TColumnIndex; 15 | Node: PVirtualNode; Namespace: TNamespace; var Text: string); 16 | procedure ExplorerListview1HeaderRebuild(Sender: TCustomVirtualExplorerTree; 17 | Header: TVTHeader); 18 | procedure ExplorerListview1CustomColumnCompare( 19 | Sender: TCustomVirtualExplorerTree; Column: TColumnIndex; Node1, 20 | Node2: PVirtualNode; var Result: Integer); 21 | private 22 | { Private declarations } 23 | public 24 | { Public declarations } 25 | CustomIndex: integer; 26 | end; 27 | 28 | var 29 | Form1: TForm1; 30 | 31 | implementation 32 | 33 | {$R *.DFM} 34 | 35 | procedure TForm1.ExplorerListview1GetVETText( 36 | Sender: TCustomVirtualExplorerTree; Column: TColumnIndex; Node: PVirtualNode; 37 | Namespace: TNamespace; var Text: string); 38 | var 39 | NS: TNamespace; 40 | begin 41 | if Sender.ValidateNamespace(Node, NS) then 42 | begin 43 | if Column = CustomIndex then 44 | Text := ExtractFileExt(NS.NameParseAddress); 45 | if Column = CustomIndex + 1 then 46 | Text := 'CustomColumn 2' 47 | end; 48 | end; 49 | 50 | procedure TForm1.ExplorerListview1HeaderRebuild( 51 | Sender: TCustomVirtualExplorerTree; Header: TVTHeader); 52 | var 53 | NewColumn: TVETColumn; 54 | begin 55 | CustomIndex := Header.Columns.Count; 56 | NewColumn := TVETColumn(Header.Columns.Add); 57 | NewColumn.ColumnDetails := cdCustom; 58 | NewColumn.Text := 'Extension'; 59 | NewColumn.Width := 60; 60 | 61 | NewColumn := TVETColumn( Header.Columns.Add); 62 | NewColumn.ColumnDetails := cdCustom; 63 | NewColumn.Text := 'Second Custom'; 64 | end; 65 | 66 | procedure TForm1.ExplorerListview1CustomColumnCompare( 67 | Sender: TCustomVirtualExplorerTree; Column: TColumnIndex; Node1, 68 | Node2: PVirtualNode; var Result: Integer); 69 | var 70 | NS1, NS2: TNamespace; 71 | s1, s2: string; 72 | begin 73 | if Sender.ValidateNamespace(Node1, NS1) and Sender.ValidateNamespace(Node2, NS2) then 74 | begin 75 | if Column = CustomIndex then 76 | begin 77 | { Win9x compatible } 78 | s1 := ExtractFileExt(NS1.NameParseAddress); 79 | s2 := ExtractFileExt(NS2.NameParseAddress); 80 | Result := lstrcmp(PChar(s1), PChar(s2)); 81 | { If equal use the name ordering as a secondary sort } 82 | if Result = 0 then 83 | begin 84 | s1 := NS1.NameNormal; 85 | s2 := NS2.NameNormal; 86 | Result := lstrcmp(PChar(s1), PChar(s2)); 87 | end; 88 | end 89 | end; 90 | end; 91 | 92 | end. 93 | -------------------------------------------------------------------------------- /Demos/Applet and Wizard Launcher/AppletWizardLauncher.dpr: -------------------------------------------------------------------------------- 1 | program AppletWizardLauncher; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Applet and Wizard Launcher/AppletWizardLauncher.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Applet and Wizard Launcher/AppletWizardLauncher.res -------------------------------------------------------------------------------- /Demos/AutoComplete Component/AutoCompleteComponentProject.dpr: -------------------------------------------------------------------------------- 1 | program AutoCompleteComponentProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/AutoComplete Component/AutoCompleteComponentProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/AutoComplete Component/AutoCompleteComponentProject.res -------------------------------------------------------------------------------- /Demos/AutoComplete Component/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 243 3 | Top = 192 4 | Width = 765 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | DesignSize = ( 15 | 749 16 | 442) 17 | PixelsPerInch = 96 18 | TextHeight = 13 19 | object Label1: TLabel 20 | Left = 272 21 | Top = 184 22 | Width = 446 23 | Height = 13 24 | Caption = 25 | 'Select a folder in the treeview to see what the shell suggests f' + 26 | 'or autocomplete on the folder ' 27 | end 28 | object CheckBox1: TCheckBox 29 | Left = 264 30 | Top = 8 31 | Width = 201 32 | Height = 17 33 | Caption = 'Include Current Directory' 34 | Checked = True 35 | State = cbChecked 36 | TabOrder = 0 37 | OnClick = CheckBox1Click 38 | end 39 | object CheckBox2: TCheckBox 40 | Left = 264 41 | Top = 24 42 | Width = 201 43 | Height = 17 44 | Caption = 'Include My Computer' 45 | Checked = True 46 | State = cbChecked 47 | TabOrder = 1 48 | OnClick = CheckBox2Click 49 | end 50 | object CheckBox3: TCheckBox 51 | Left = 264 52 | Top = 40 53 | Width = 201 54 | Height = 17 55 | Caption = 'Include Desktop' 56 | Checked = True 57 | State = cbChecked 58 | TabOrder = 2 59 | OnClick = CheckBox3Click 60 | end 61 | object VirtualExplorerTreeview1: TVirtualExplorerTreeview 62 | Left = 0 63 | Top = 0 64 | Width = 257 65 | Height = 442 66 | Active = True 67 | Align = alLeft 68 | ColumnDetails = cdUser 69 | DefaultNodeHeight = 17 70 | DragHeight = 250 71 | DragWidth = 150 72 | FileSizeFormat = fsfExplorer 73 | FileSort = fsFileType 74 | Header.AutoSizeIndex = 0 75 | Header.DefaultHeight = 17 76 | Header.Font.Charset = DEFAULT_CHARSET 77 | Header.Font.Color = clWindowText 78 | Header.Font.Height = -11 79 | Header.Font.Name = 'MS Shell Dlg 2' 80 | Header.Font.Style = [] 81 | Header.MainColumn = -1 82 | Header.Options = [hoColumnResize, hoDrag] 83 | HintAnimation = hatNone 84 | HintMode = hmHint 85 | ParentColor = False 86 | RootFolder = rfDesktop 87 | TabOrder = 3 88 | TabStop = True 89 | TreeOptions.AutoOptions = [toAutoScroll] 90 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toToggleOnDblClick] 91 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages] 92 | TreeOptions.SelectionOptions = [toMultiSelect, toRightClickSelect, toSiblingSelectConstraint] 93 | TreeOptions.VETShellOptions = [toContextMenus] 94 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 95 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toChangeNotifierThread] 96 | TreeOptions.VETImageOptions = [toImages, toThreadedImages] 97 | OnFocusChanged = VirtualExplorerTreeview1FocusChanged 98 | Columns = <> 99 | end 100 | object CheckBox4: TCheckBox 101 | Left = 264 102 | Top = 56 103 | Width = 201 104 | Height = 17 105 | Caption = 'Include Favorites' 106 | TabOrder = 4 107 | OnClick = CheckBox4Click 108 | end 109 | object CheckBox5: TCheckBox 110 | Left = 264 111 | Top = 72 112 | Width = 201 113 | Height = 17 114 | Caption = 'Include Only File System Objects' 115 | TabOrder = 5 116 | OnClick = CheckBox5Click 117 | end 118 | object CheckBox6: TCheckBox 119 | Left = 264 120 | Top = 88 121 | Width = 201 122 | Height = 17 123 | Caption = 'Include File Folders' 124 | Checked = True 125 | State = cbChecked 126 | TabOrder = 6 127 | OnClick = CheckBox6Click 128 | end 129 | object CheckBox7: TCheckBox 130 | Left = 264 131 | Top = 104 132 | Width = 201 133 | Height = 17 134 | Caption = 'Include Files' 135 | Checked = True 136 | State = cbChecked 137 | TabOrder = 7 138 | OnClick = CheckBox7Click 139 | end 140 | object CheckBox8: TCheckBox 141 | Left = 264 142 | Top = 120 143 | Width = 201 144 | Height = 17 145 | Caption = 'Include Hidden Objects' 146 | TabOrder = 8 147 | OnClick = CheckBox8Click 148 | end 149 | object CheckBox9: TCheckBox 150 | Left = 264 151 | Top = 136 152 | Width = 201 153 | Height = 17 154 | Caption = 'Recurse into Sub-Folders' 155 | TabOrder = 9 156 | OnClick = CheckBox9Click 157 | end 158 | object CheckBox10: TCheckBox 159 | Left = 264 160 | Top = 152 161 | Width = 201 162 | Height = 17 163 | Caption = 'Sort List' 164 | TabOrder = 10 165 | OnClick = CheckBox10Click 166 | end 167 | object ListBox1: TListBox 168 | Left = 264 169 | Top = 208 170 | Width = 478 171 | Height = 225 172 | Anchors = [akLeft, akTop, akRight, akBottom] 173 | ItemHeight = 13 174 | TabOrder = 11 175 | end 176 | object VirtualShellAutoComplete1: TVirtualShellAutoComplete 177 | CurrentDir = '' 178 | Left = 528 179 | Top = 136 180 | end 181 | end 182 | -------------------------------------------------------------------------------- /Demos/AutoComplete Component/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, VirtualShellAutoComplete, VirtualTrees, 8 | VirtualExplorerTree; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | CheckBox1: TCheckBox; 13 | CheckBox2: TCheckBox; 14 | CheckBox3: TCheckBox; 15 | VirtualShellAutoComplete1: TVirtualShellAutoComplete; 16 | VirtualExplorerTreeview1: TVirtualExplorerTreeview; 17 | CheckBox4: TCheckBox; 18 | CheckBox5: TCheckBox; 19 | CheckBox6: TCheckBox; 20 | CheckBox7: TCheckBox; 21 | CheckBox8: TCheckBox; 22 | CheckBox9: TCheckBox; 23 | CheckBox10: TCheckBox; 24 | Label1: TLabel; 25 | ListBox1: TListBox; 26 | procedure CheckBox1Click(Sender: TObject); 27 | procedure CheckBox2Click(Sender: TObject); 28 | procedure CheckBox3Click(Sender: TObject); 29 | procedure CheckBox4Click(Sender: TObject); 30 | procedure CheckBox5Click(Sender: TObject); 31 | procedure CheckBox6Click(Sender: TObject); 32 | procedure CheckBox7Click(Sender: TObject); 33 | procedure CheckBox8Click(Sender: TObject); 34 | procedure CheckBox9Click(Sender: TObject); 35 | procedure CheckBox10Click(Sender: TObject); 36 | procedure VirtualExplorerTreeview1FocusChanged( 37 | Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); 38 | private 39 | { Private declarations } 40 | public 41 | { Public declarations } 42 | end; 43 | 44 | var 45 | Form1: TForm1; 46 | 47 | implementation 48 | 49 | {$R *.dfm} 50 | 51 | procedure TForm1.CheckBox1Click(Sender: TObject); 52 | begin 53 | if CheckBox1.Checked then 54 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accCurrentDir] 55 | else 56 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accCurrentDir] 57 | end; 58 | 59 | procedure TForm1.CheckBox2Click(Sender: TObject); 60 | begin 61 | if CheckBox2.Checked then 62 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accMyComputer] 63 | else 64 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accMyComputer] 65 | end; 66 | 67 | procedure TForm1.CheckBox3Click(Sender: TObject); 68 | begin 69 | if CheckBox3.Checked then 70 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accDesktop] 71 | else 72 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accDesktop] 73 | end; 74 | 75 | procedure TForm1.CheckBox4Click(Sender: TObject); 76 | begin 77 | if CheckBox4.Checked then 78 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accFavorites] 79 | else 80 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accFavorites] 81 | end; 82 | 83 | procedure TForm1.CheckBox5Click(Sender: TObject); 84 | begin 85 | if CheckBox5.Checked then 86 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accFileSysOnly] 87 | else 88 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accFileSysOnly] 89 | end; 90 | 91 | procedure TForm1.CheckBox6Click(Sender: TObject); 92 | begin 93 | if CheckBox6.Checked then 94 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accFileSysDirs] 95 | else 96 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accFileSysDirs] 97 | end; 98 | 99 | procedure TForm1.CheckBox7Click(Sender: TObject); 100 | begin 101 | if CheckBox7.Checked then 102 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accFileSysFiles] 103 | else 104 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accFileSysFiles] 105 | end; 106 | 107 | procedure TForm1.CheckBox8Click(Sender: TObject); 108 | begin 109 | if CheckBox8.Checked then 110 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accHidden] 111 | else 112 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accHidden] 113 | end; 114 | 115 | procedure TForm1.CheckBox9Click(Sender: TObject); 116 | begin 117 | if CheckBox9.Checked then 118 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accRecursive] 119 | else 120 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accRecursive] 121 | end; 122 | 123 | procedure TForm1.CheckBox10Click(Sender: TObject); 124 | begin 125 | if CheckBox10.Checked then 126 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents + [accSortList] 127 | else 128 | VirtualShellAutoComplete1.Contents := VirtualShellAutoComplete1.Contents - [accSortList] 129 | end; 130 | 131 | procedure TForm1.VirtualExplorerTreeview1FocusChanged( 132 | Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); 133 | var 134 | OldCursor: TCursor; 135 | begin 136 | OldCursor := Screen.Cursor; 137 | Screen.Cursor := crHourglass; 138 | try 139 | VirtualShellAutoComplete1.CurrentDir := VirtualExplorerTreeview1.SelectedPath; 140 | VirtualShellAutoComplete1.Refresh; 141 | ListBox1.Items := VirtualShellAutoComplete1.Strings; 142 | finally 143 | Screen.Cursor := OldCursor 144 | end 145 | 146 | end; 147 | 148 | end. 149 | -------------------------------------------------------------------------------- /Demos/AutoCompleteObject/AutoCompleteObject.dpr: -------------------------------------------------------------------------------- 1 | program AutoCompleteObject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/AutoCompleteObject/AutoCompleteObject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/AutoCompleteObject/AutoCompleteObject.res -------------------------------------------------------------------------------- /Demos/AutoCompleteObject/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 320 3 | Top = 329 4 | Caption = 'Form1' 5 | ClientHeight = 252 6 | ClientWidth = 520 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | DesignSize = ( 15 | 520 16 | 252) 17 | PixelsPerInch = 96 18 | TextHeight = 13 19 | object Label1: TLabel 20 | Left = 8 21 | Top = 16 22 | Width = 211 23 | Height = 13 24 | Caption = 'Start to type a target path into the Combobox' 25 | end 26 | object ExplorerTreeview1: TVirtualExplorerTreeview 27 | Left = 8 28 | Top = 72 29 | Width = 200 30 | Height = 204 31 | Active = True 32 | Anchors = [akLeft, akTop, akBottom] 33 | ColumnDetails = cdUser 34 | DefaultNodeHeight = 17 35 | DragHeight = 250 36 | DragWidth = 150 37 | ExplorerComboBox = ExplorerComboBox1 38 | FileObjects = [foFolders, foHidden, foEnableAsync] 39 | FileSizeFormat = fsfExplorer 40 | FileSort = fsFileType 41 | Header.AutoSizeIndex = 0 42 | Header.Font.Charset = DEFAULT_CHARSET 43 | Header.Font.Color = clWindowText 44 | Header.Font.Height = -11 45 | Header.Font.Name = 'MS Sans Serif' 46 | Header.Font.Style = [] 47 | Header.MainColumn = -1 48 | Header.Options = [hoColumnResize, hoDrag] 49 | HintAnimation = hatNone 50 | HintMode = hmHint 51 | ParentColor = False 52 | RootFolder = rfDesktop 53 | TabOrder = 0 54 | TabStop = True 55 | TreeOptions.AutoOptions = [toAutoScroll, toAutoScrollOnExpand] 56 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toToggleOnDblClick] 57 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages] 58 | TreeOptions.SelectionOptions = [toMultiSelect, toRightClickSelect, toSiblingSelectConstraint] 59 | TreeOptions.VETShellOptions = [toContextMenus] 60 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 61 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toChangeNotifierThread] 62 | TreeOptions.VETImageOptions = [toImages, toThreadedImages] 63 | VirtualExplorerListview = ExplorerListview1 64 | Columns = <> 65 | end 66 | object ExplorerListview1: TVirtualExplorerListview 67 | Left = 214 68 | Top = 72 69 | Width = 297 70 | Height = 201 71 | Active = True 72 | Anchors = [akLeft, akTop, akRight, akBottom] 73 | ColumnDetails = cdShellColumns 74 | DefaultNodeHeight = 17 75 | DragHeight = 250 76 | DragWidth = 150 77 | FileObjects = [foFolders, foNonFolders, foHidden] 78 | FileSizeFormat = fsfExplorer 79 | FileSort = fsFileType 80 | Header.AutoSizeIndex = -1 81 | Header.Font.Charset = DEFAULT_CHARSET 82 | Header.Font.Color = clWindowText 83 | Header.Font.Height = -11 84 | Header.Font.Name = 'MS Sans Serif' 85 | Header.Font.Style = [] 86 | Header.Options = [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible] 87 | Header.SortColumn = 0 88 | HintAnimation = hatNone 89 | HintMode = hmHint 90 | Indent = 0 91 | ParentColor = False 92 | RootFolder = rfDesktop 93 | TabOrder = 1 94 | TabStop = True 95 | TreeOptions.AutoOptions = [toAutoScroll] 96 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toReportMode, toToggleOnDblClick] 97 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages] 98 | TreeOptions.SelectionOptions = [toMultiSelect, toRightClickSelect, toSiblingSelectConstraint] 99 | TreeOptions.VETFolderOptions = [toHideRootFolder] 100 | TreeOptions.VETShellOptions = [toContextMenus, toShellColumnMenu] 101 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 102 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toChangeNotifierThread] 103 | TreeOptions.VETImageOptions = [toImages, toThreadedImages] 104 | ColumnMenuItemCount = 8 105 | VirtualExplorerTreeview = ExplorerTreeview1 106 | ThreadedEnum = True 107 | end 108 | object ExplorerComboBox1: TVirtualExplorerCombobox 109 | Left = 8 110 | Top = 40 111 | Width = 300 112 | Active = True 113 | Constraints.MinHeight = 23 114 | Options = [vcboThemeAware] 115 | TabOrder = 2 116 | TabStop = False 117 | Path = 'ExplorerComboBox1' 118 | PopupAutoCompleteOptions.Contents = [accCurrentDir, accMyComputer, accDesktop, accFileSysDirs, accFileSysFiles] 119 | PopupAutoCompleteOptions.OnAutoCompleteUpdateList = ExplorerComboBox1AutoCompleteUpdateList 120 | VirtualExplorerTree = ExplorerTreeview1 121 | OnAutoCompleteUpdateList = ExplorerComboBox1AutoCompleteUpdateList 122 | end 123 | object CheckBoxCustom: TCheckBox 124 | Left = 320 125 | Top = 40 126 | Width = 129 127 | Height = 17 128 | Caption = 'Fill with Custom Paths' 129 | TabOrder = 3 130 | end 131 | end 132 | -------------------------------------------------------------------------------- /Demos/AutoCompleteObject/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | // Demo of how to custom popuplate the Autocomple drop down 4 | 5 | interface 6 | 7 | uses 8 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 9 | StdCtrls, VirtualExplorerTree, ExtCtrls, VirtualTrees; 10 | 11 | type 12 | TForm1 = class(TForm) 13 | ExplorerTreeview1: TVirtualExplorerTreeview; 14 | ExplorerListview1: TVirtualExplorerListview; 15 | ExplorerComboBox1: TVirtualExplorerCombobox; 16 | CheckBoxCustom: TCheckBox; 17 | Label1: TLabel; 18 | procedure ExplorerComboBox1AutoCompleteUpdateList(Sender: TObject; 19 | const CurrentEditContents: string; EnumList: TStringList; 20 | var Handled: Boolean); 21 | private 22 | { Private declarations } 23 | public 24 | { Public declarations } 25 | end; 26 | 27 | var 28 | Form1: TForm1; 29 | 30 | implementation 31 | 32 | {$R *.DFM} 33 | 34 | procedure TForm1.ExplorerComboBox1AutoCompleteUpdateList(Sender: TObject; 35 | const CurrentEditContents: string; EnumList: TStringList; 36 | var Handled: Boolean); 37 | begin 38 | if CheckBoxCustom.Checked then 39 | begin 40 | Handled := True; // We are handling the autocomplete list 41 | EnumList.Add('C:\'); 42 | EnumList.Add('C:\Windows'); 43 | EnumList.Add('C:\Windows\System'); 44 | EnumList.Add('C:\WinNT'); 45 | EnumList.Add('C:\WinNT\System32'); 46 | EnumList.Add('D:\'); 47 | EnumList.Add('Control Panel'); 48 | EnumList.Add('Recycle Bin'); 49 | end; 50 | end; 51 | 52 | end. 53 | -------------------------------------------------------------------------------- /Demos/Backgnd Menu/BkGndMenuProject.dpr: -------------------------------------------------------------------------------- 1 | program BkGndMenuProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/CheckBoxes/CheckBoxes.dpr: -------------------------------------------------------------------------------- 1 | program CheckBoxes; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | 15 | -------------------------------------------------------------------------------- /Demos/CheckBoxes/CheckBoxes.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/CheckBoxes/CheckBoxes.res -------------------------------------------------------------------------------- /Demos/CheckBoxes/TEST.TXT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/CheckBoxes/TEST.TXT -------------------------------------------------------------------------------- /Demos/Custom Columns/CustomColumnProject.dpr: -------------------------------------------------------------------------------- 1 | program CustomColumnProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Custom Columns/CustomColumnProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Custom Columns/CustomColumnProject.res -------------------------------------------------------------------------------- /Demos/Custom Columns/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 316 3 | Top = 110 4 | Width = 667 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 17 | Left = 0 18 | Top = 0 19 | Width = 651 20 | Height = 444 21 | Active = True 22 | Align = alClient 23 | CompressedFile.Color = clBlue 24 | CompressedFile.Font.Charset = DEFAULT_CHARSET 25 | CompressedFile.Font.Color = clWindowText 26 | CompressedFile.Font.Height = -11 27 | CompressedFile.Font.Name = 'MS Shell Dlg 2' 28 | CompressedFile.Font.Style = [] 29 | DefaultSortColumn = 0 30 | EditManager.Font.Charset = DEFAULT_CHARSET 31 | EditManager.Font.Color = clWindowText 32 | EditManager.Font.Height = -11 33 | EditManager.Font.Name = 'MS Shell Dlg 2' 34 | EditManager.Font.Style = [] 35 | EncryptedFile.Color = clGreen 36 | EncryptedFile.Font.Charset = DEFAULT_CHARSET 37 | EncryptedFile.Font.Color = clWindowText 38 | EncryptedFile.Font.Height = -11 39 | EncryptedFile.Font.Name = 'MS Shell Dlg 2' 40 | EncryptedFile.Font.Style = [] 41 | FileSizeFormat = vfsfDefault 42 | Font.Charset = DEFAULT_CHARSET 43 | Font.Color = clWindowText 44 | Font.Height = -11 45 | Font.Name = 'MS Shell Dlg 2' 46 | Font.Style = [] 47 | Grouped = False 48 | GroupingColumn = 0 49 | GroupFont.Charset = DEFAULT_CHARSET 50 | GroupFont.Color = clWindowText 51 | GroupFont.Height = -11 52 | GroupFont.Name = 'MS Shell Dlg 2' 53 | GroupFont.Style = [] 54 | Header.Font.Charset = DEFAULT_CHARSET 55 | Header.Font.Color = clWindowText 56 | Header.Font.Height = -11 57 | Header.Font.Name = 'MS Shell Dlg 2' 58 | Header.Font.Style = [] 59 | Header.Visible = True 60 | Options = [eloBrowseExecuteFolder, eloBrowseExecuteFolderShortcut, eloBrowseExecuteZipFolder, eloExecuteOnDblClick, eloThreadedEnumeration, eloThreadedImages, eloThreadedDetails] 61 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 62 | PaintInfoGroup.MarginTop.Visible = False 63 | ParentFont = False 64 | Sort.Algorithm = esaQuickSort 65 | Sort.AutoSort = True 66 | TabOrder = 0 67 | ThumbsManager.StorageFilename = 'Thumbnails.album' 68 | View = elsReport 69 | OnCustomColumnAdd = VirtualExplorerEasyListview1CustomColumnAdd 70 | OnCustomColumnCompare = VirtualExplorerEasyListview1CustomColumnCompare 71 | OnCustomColumnGetCaption = VirtualExplorerEasyListview1CustomColumnGetCaption 72 | end 73 | end 74 | -------------------------------------------------------------------------------- /Demos/Custom Columns/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, MPCommonObjects, EasyListview, VirtualExplorerEasyListview, Menus, 8 | MPShellUtilities; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 13 | procedure VirtualExplorerEasyListview1CustomColumnAdd( 14 | Sender: TCustomVirtualExplorerEasyListview; 15 | AddColumnProc: TELVAddColumnProc); 16 | procedure VirtualExplorerEasyListview1CustomColumnCompare( 17 | Sender: TCustomVirtualExplorerEasyListview; Column: TExplorerColumn; 18 | Group: TEasyGroup; Item1, Item2: TExplorerItem; 19 | var CompareResult: Integer); 20 | procedure VirtualExplorerEasyListview1CustomColumnGetCaption( 21 | Sender: TCustomVirtualExplorerEasyListview; Column: TExplorerColumn; 22 | Item: TExplorerItem; var Caption: string); 23 | private 24 | { Private declarations } 25 | public 26 | { Public declarations } 27 | end; 28 | 29 | var 30 | Form1: TForm1; 31 | 32 | implementation 33 | 34 | {$R *.dfm} 35 | 36 | procedure TForm1.VirtualExplorerEasyListview1CustomColumnAdd( 37 | Sender: TCustomVirtualExplorerEasyListview; 38 | AddColumnProc: TELVAddColumnProc); 39 | var 40 | Column: TExplorerColumn; 41 | begin 42 | Column := AddColumnProc; 43 | Column.Caption := 'Custom Column'; 44 | Column.Width := 120; 45 | Column.Alignment := taRightJustify; 46 | Column.Visible := True; 47 | end; 48 | 49 | procedure TForm1.VirtualExplorerEasyListview1CustomColumnCompare( 50 | Sender: TCustomVirtualExplorerEasyListview; Column: TExplorerColumn; 51 | Group: TEasyGroup; Item1, Item2: TExplorerItem; 52 | var CompareResult: Integer); 53 | begin 54 | // sort on something silly like the item pointers 55 | CompareResult := Integer( Item1) - Integer( Item2); 56 | if Column.SortDirection = esdDescending then 57 | CompareResult := -CompareResult; 58 | end; 59 | 60 | procedure TForm1.VirtualExplorerEasyListview1CustomColumnGetCaption( 61 | Sender: TCustomVirtualExplorerEasyListview; Column: TExplorerColumn; 62 | Item: TExplorerItem; var Caption: string); 63 | begin 64 | // Something silly and unique 65 | Caption := IntToStr( Integer(Item)) 66 | end; 67 | 68 | end. 69 | -------------------------------------------------------------------------------- /Demos/Custom Sorting/CustomSortProject.dpr: -------------------------------------------------------------------------------- 1 | program CustomSortProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Custom Sorting/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 293 3 | Top = 197 4 | Width = 553 5 | Height = 409 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object Panel1: TPanel 17 | Left = 0 18 | Top = 41 19 | Width = 545 20 | Height = 334 21 | Align = alClient 22 | BevelOuter = bvNone 23 | TabOrder = 0 24 | object VirtualExplorerTreeview1: TVirtualExplorerTreeview 25 | Left = 0 26 | Top = 0 27 | Width = 200 28 | Height = 315 29 | Active = True 30 | Align = alLeft 31 | ColumnDetails = cdUser 32 | DefaultNodeHeight = 17 33 | DragHeight = 250 34 | DragWidth = 150 35 | FileSizeFormat = fsfExplorer 36 | FileSort = fsFileType 37 | Header.AutoSizeIndex = 0 38 | Header.Font.Charset = DEFAULT_CHARSET 39 | Header.Font.Color = clWindowText 40 | Header.Font.Height = -11 41 | Header.Font.Name = 'MS Sans Serif' 42 | Header.Font.Style = [] 43 | Header.MainColumn = -1 44 | Header.Options = [hoColumnResize, hoDrag] 45 | HintMode = hmHint 46 | ParentColor = False 47 | RootFolder = rfDesktop 48 | TabOrder = 0 49 | TabStop = True 50 | TreeOptions.AutoOptions = [toAutoScroll] 51 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toToggleOnDblClick] 52 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages, toGhostedIfUnfocused] 53 | TreeOptions.SelectionOptions = [toLevelSelectConstraint] 54 | TreeOptions.VETShellOptions = [toContextMenus] 55 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 56 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toBrowseExecuteZipFolder, toChangeNotifierThread, toRemoveContextMenuShortCut] 57 | TreeOptions.VETImageOptions = [toImages, toThreadedImages, toMarkCutAndCopy] 58 | OnFocusChanged = VirtualExplorerTreeview1FocusChanged 59 | Columns = <> 60 | end 61 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 62 | Left = 200 63 | Top = 0 64 | Width = 345 65 | Height = 315 66 | Align = alClient 67 | DefaultSortColumn = 0 68 | DefaultSortDir = esdNone 69 | Font.Charset = DEFAULT_CHARSET 70 | Font.Color = clWindowText 71 | Font.Height = -11 72 | Font.Name = 'MS Shell Dlg 2' 73 | Font.Style = [] 74 | Grouped = False 75 | GroupingColumn = 0 76 | GroupFont.Charset = DEFAULT_CHARSET 77 | GroupFont.Color = clWindowText 78 | GroupFont.Height = -11 79 | GroupFont.Name = 'MS Shell Dlg 2' 80 | GroupFont.Style = [] 81 | Header.Font.Charset = DEFAULT_CHARSET 82 | Header.Font.Color = clWindowText 83 | Header.Font.Height = -11 84 | Header.Font.Name = 'MS Shell Dlg 2' 85 | Header.Font.Style = [] 86 | Header.Visible = True 87 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 88 | ParentFont = False 89 | ShowInactive = False 90 | TabOrder = 1 91 | ThumbsManager.StorageFilename = 'Thumbnails.album' 92 | View = elsIcon 93 | OnEnumFolder = VirtualExplorerEasyListview1EnumFolder 94 | OnItemCompare = VirtualExplorerEasyListview1ItemCompare 95 | end 96 | object StatusBar1: TStatusBar 97 | Left = 0 98 | Top = 315 99 | Width = 545 100 | Height = 19 101 | Panels = < 102 | item 103 | Width = 50 104 | end> 105 | end 106 | end 107 | object Panel2: TPanel 108 | Left = 0 109 | Top = 0 110 | Width = 545 111 | Height = 41 112 | Align = alTop 113 | TabOrder = 1 114 | object CheckBox1: TCheckBox 115 | Left = 16 116 | Top = 8 117 | Width = 281 118 | Height = 17 119 | Caption = 'Assign OnItemCompare' 120 | TabOrder = 0 121 | OnClick = CheckBox1Click 122 | end 123 | object ComboBox1: TComboBox 124 | Left = 320 125 | Top = 8 126 | Width = 145 127 | Height = 21 128 | Style = csDropDownList 129 | ItemHeight = 13 130 | ItemIndex = 0 131 | TabOrder = 1 132 | Text = 'Icon' 133 | OnChange = ComboBox1Change 134 | Items.Strings = ( 135 | 'Icon' 136 | 'SmallIcon' 137 | 'List' 138 | 'Details' 139 | 'Thumbnails' 140 | 'Tile') 141 | end 142 | end 143 | end 144 | -------------------------------------------------------------------------------- /Demos/Custom Sorting/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | // 4 | // Note there is no linking between the Tree and the List. We 5 | // have to use the EnumFolder to make sure that the header is correct 6 | // in Details mode, just don't allow any of the items. 7 | // 8 | // The items are filled using FindFirst/FindNext enumeration and sorted 9 | // via the OnItemCompare method. Note the calls to Begin/EndUpdate. These 10 | // are critical to make sure that the OnItemCompare event is not called when 11 | // the new item is created and before the Namespace parameter is assigned. 12 | // 13 | 14 | interface 15 | 16 | uses 17 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 18 | Dialogs, MPCommonObjects, EasyListview, VirtualExplorerEasyListview, 19 | VirtualTrees, ShlObj, VirtualExplorerTree, MPShellUtilities, 20 | StdCtrls, ExtCtrls, ComCtrls; 21 | 22 | type 23 | TForm1 = class(TForm) 24 | Panel1: TPanel; 25 | VirtualExplorerTreeview1: TVirtualExplorerTreeview; 26 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 27 | Panel2: TPanel; 28 | CheckBox1: TCheckBox; 29 | ComboBox1: TComboBox; 30 | StatusBar1: TStatusBar; 31 | procedure VirtualExplorerTreeview1FocusChanged( 32 | Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); 33 | function VirtualExplorerEasyListview1ItemCompare( 34 | Sender: TCustomEasyListview; Column: TEasyColumn; Group: TEasyGroup; 35 | Item1, Item2: TEasyItem; var DoDefault: Boolean): Integer; 36 | procedure CheckBox1Click(Sender: TObject); 37 | procedure ComboBox1Change(Sender: TObject); 38 | procedure VirtualExplorerEasyListview1EnumFolder( 39 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 40 | var AllowAsChild: Boolean); 41 | private 42 | function GetCurrentDirectory: String; 43 | private 44 | { Private-Deklarationen } 45 | property CurrentDirectory: String read GetCurrentDirectory; 46 | function AddFiles(ADirectory: String): Integer; 47 | procedure AddFile(AFile: String); 48 | public 49 | { Public-Deklarationen } 50 | end; 51 | 52 | var 53 | Form1: TForm1; 54 | 55 | implementation 56 | 57 | {$R *.dfm} 58 | 59 | procedure TForm1.AddFile(AFile: String); 60 | var 61 | NS: TNamespace; 62 | PIDL: PItemIDList; 63 | oItem: TExplorerItem; 64 | begin 65 | PIDL := PathToPIDL(AFile); 66 | if Assigned(PIDL) then 67 | begin 68 | NS := TNamespace.Create(PIDL, nil); 69 | // This Crashes because oItem.Namespace is not already assigned 70 | oItem := VirtualExplorerEasyListview1.Groups[0].Items.AddCustom(TExplorerItem) as TExplorerItem; 71 | oItem.Namespace := NS; 72 | end; 73 | end; 74 | 75 | function TForm1.AddFiles(ADirectory: String): Integer; 76 | var 77 | SR: TSearchRec; 78 | begin 79 | Result := 0; 80 | ADirectory := IncludeTrailingPathDelimiter(ADirectory); 81 | VirtualExplorerEasyListview1.BeginUpdate; 82 | try 83 | if SysUtils.FindFirst(ADirectory + '*.*', faAnyFile, SR) = 0 then 84 | begin 85 | repeat 86 | if ((SR.Attr and (faDirectory or faVolumeID)) = 0) and (SR.Name<>'.') and (SR.Name<>'..') then 87 | begin 88 | AddFile(ADirectory + SR.Name); 89 | Inc(Result) 90 | end; 91 | until SysUtils.FindNext(SR)<>0; 92 | SysUtils.FindClose(SR); 93 | end; 94 | finally 95 | VirtualExplorerEasyListview1.EndUpdate; 96 | end 97 | end; 98 | 99 | procedure TForm1.VirtualExplorerTreeview1FocusChanged( 100 | Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); 101 | begin 102 | VirtualExplorerEasyListview1.Clear; 103 | VirtualExplorerEasyListview1.Rebuild; 104 | StatusBar1.Panels[0].Text := 'File Objects Found = ' + IntToStr(AddFiles(CurrentDirectory)) 105 | end; 106 | 107 | function TForm1.VirtualExplorerEasyListview1ItemCompare( 108 | Sender: TCustomEasyListview; Column: TEasyColumn; Group: TEasyGroup; 109 | Item1, Item2: TEasyItem; var DoDefault: Boolean): Integer; 110 | begin 111 | // Not sure if this is Unicode enabled 112 | Result := CompareText(Item1.Captions[Column.Index], Item2.Captions[Column.Index]); 113 | if Column.SortDirection = esdDescending then 114 | Result := -Result 115 | end; 116 | 117 | procedure TForm1.CheckBox1Click(Sender: TObject); 118 | begin 119 | if CheckBox1.Checked then 120 | VirtualExplorerEasyListview1.OnItemCompare := VirtualExplorerEasyListview1ItemCompare 121 | else 122 | VirtualExplorerEasyListview1.OnItemCompare := nil; 123 | VirtualExplorerEasyListview1.Clear; 124 | AddFiles(CurrentDirectory); 125 | end; 126 | 127 | function TForm1.GetCurrentDirectory: String; 128 | var 129 | NS: TNamespace; 130 | begin 131 | if VirtualExplorerTreeview1.ValidateNamespace(VirtualExplorerTreeview1.GetFirstSelected, NS) then 132 | Result := NS.NameParseAddress 133 | else 134 | Result := ''; 135 | end; 136 | 137 | procedure TForm1.ComboBox1Change(Sender: TObject); 138 | begin 139 | VirtualExplorerEasyListview1.View := TEasyListStyle(ComboBox1.ItemIndex) 140 | end; 141 | 142 | procedure TForm1.VirtualExplorerEasyListview1EnumFolder( 143 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 144 | var AllowAsChild: Boolean); 145 | begin 146 | AllowAsChild := False 147 | end; 148 | 149 | end. 150 | -------------------------------------------------------------------------------- /Demos/DOS Shell CommandLine/DOSCommandLineProject.dpr: -------------------------------------------------------------------------------- 1 | program DOSCommandLineProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/DOS Shell CommandLine/DOSCommandLineProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/DOS Shell CommandLine/DOSCommandLineProject.res -------------------------------------------------------------------------------- /Demos/DOS Shell CommandLine/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 275 3 | Top = 125 4 | Caption = 'Form1' 5 | ClientHeight = 442 6 | ClientWidth = 680 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnCloseQuery = FormCloseQuery 15 | OnDestroy = FormDestroy 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object Panel1: TPanel 19 | Left = 0 20 | Top = 388 21 | Width = 680 22 | Height = 54 23 | Align = alBottom 24 | TabOrder = 0 25 | DesignSize = ( 26 | 680 27 | 54) 28 | object Label1: TLabel 29 | Left = 128 30 | Top = 8 31 | Width = 427 32 | Height = 39 33 | Anchors = [akLeft, akTop, akRight, akBottom] 34 | Caption = 35 | 'The handing of the output of the command shell is not fully impl' + 36 | 'emented. This demo just shows how to use the TVirtualCommandLin' + 37 | 'eRedirector. To run other service applications use TVirtualRedi' + 38 | 'rector' 39 | WordWrap = True 40 | end 41 | object Button1: TButton 42 | Left = 8 43 | Top = 8 44 | Width = 105 45 | Height = 25 46 | Caption = 'Run DOS Service...' 47 | TabOrder = 0 48 | OnClick = Button1Click 49 | end 50 | end 51 | object Panel2: TPanel 52 | Left = 0 53 | Top = 0 54 | Width = 680 55 | Height = 388 56 | Align = alClient 57 | Caption = 'Panel2' 58 | TabOrder = 1 59 | object RichEdit1: TRichEdit 60 | Left = 1 61 | Top = 1 62 | Width = 678 63 | Height = 386 64 | Align = alClient 65 | Color = clBlack 66 | Font.Charset = ANSI_CHARSET 67 | Font.Color = clWhite 68 | Font.Height = -13 69 | Font.Name = 'Courier New' 70 | Font.Style = [] 71 | ParentFont = False 72 | ScrollBars = ssBoth 73 | TabOrder = 0 74 | Zoom = 100 75 | OnKeyDown = RichEdit1KeyDown 76 | end 77 | end 78 | object VirtualCommandLineRedirector1: TVirtualCommandLineRedirector 79 | OnChildProcessEnd = VirtualCommandLineRedirector1ChildProcessEnd 80 | OnErrorInput = VirtualCommandLineRedirector1ErrorInput 81 | OnInput = VirtualCommandLineRedirector1Input 82 | Left = 40 83 | Top = 48 84 | end 85 | end 86 | -------------------------------------------------------------------------------- /Demos/DOS Shell CommandLine/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, VirtualRedirector, ComCtrls, RichEdit, ExtCtrls, 8 | MPCommonObjects; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | Panel1: TPanel; 13 | Panel2: TPanel; 14 | RichEdit1: TRichEdit; 15 | Button1: TButton; 16 | Label1: TLabel; 17 | VirtualCommandLineRedirector1: TVirtualCommandLineRedirector; 18 | procedure Button1Click(Sender: TObject); 19 | procedure RichEdit1KeyDown(Sender: TObject; var Key: Word; 20 | Shift: TShiftState); 21 | procedure VirtualCommandLineRedirector1ChildProcessEnd( 22 | Sender: TObject); 23 | procedure VirtualCommandLineRedirector1ErrorInput(Sender: TObject; 24 | NewInput: AnsiString); 25 | procedure VirtualCommandLineRedirector1Input(Sender: TObject; 26 | NewInput: AnsiString); 27 | procedure FormDestroy(Sender: TObject); 28 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 29 | private 30 | { Private declarations } 31 | public 32 | { Public declarations } 33 | Data: string; 34 | NewCommand: Boolean; 35 | end; 36 | 37 | var 38 | Form1: TForm1; 39 | 40 | implementation 41 | 42 | {$R *.dfm} 43 | 44 | procedure TForm1.Button1Click(Sender: TObject); 45 | var 46 | Path: string; 47 | begin 48 | SetLength(Path, MAX_PATH); 49 | GetSystemDirectory(PChar(Path), MAX_PATH); 50 | SetLength(Path, StrLen(PChar(Path))); 51 | Path := ExcludeTrailingBackslash(Path); 52 | Path := Path + '\cmd.exe'; 53 | VirtualCommandLineRedirector1.Run(Path, ExtractFileDrive(Path) + '\'); 54 | end; 55 | 56 | procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; 57 | Shift: TShiftState); 58 | var 59 | Command: string; 60 | CharRange: TCharRange; 61 | Buffer: string; 62 | begin 63 | if Key = VK_RETURN then 64 | begin 65 | SendMessage(RichEdit1.Handle, WM_SETREDRAW, 0, 0); 66 | try 67 | // Select any new data past the Data string we have stored 68 | CharRange.cpMin := Length(Data); 69 | CharRange.cpMax := SendMessage(RichEdit1.Handle, WM_GETTEXTLENGTH, 0, 0); 70 | SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LPARAM(@CharRange)); 71 | 72 | // Copy the selected text to the bufffer 73 | SetLength(Buffer, CharRange.cpMax - CharRange.cpMin); // The null is automaticlly added 74 | FillChar(PChar(@Buffer[1])^, Length(Buffer), #0); 75 | SendMessage(RichEdit1.Handle, EM_GETSELTEXT, 0, LPARAM(@Buffer[1])); 76 | 77 | // Unselect the copied string 78 | CharRange.cpMin := SendMessage(RichEdit1.Handle, WM_GETTEXTLENGTH, 0, 0); 79 | CharRange.cpMax := CharRange.cpMin; 80 | SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LPARAM(@CharRange)); 81 | 82 | NewCommand := True; 83 | VirtualCommandLineRedirector1.Write(Buffer); 84 | finally 85 | SendMessage(RichEdit1.Handle, WM_SETREDRAW, 1, 0); 86 | end; 87 | Command := Buffer; 88 | Key := 0; 89 | end; 90 | end; 91 | 92 | procedure TForm1.VirtualCommandLineRedirector1ChildProcessEnd( 93 | Sender: TObject); 94 | begin 95 | beep; 96 | end; 97 | 98 | procedure TForm1.VirtualCommandLineRedirector1ErrorInput(Sender: TObject; 99 | NewInput: AnsiString); 100 | begin 101 | beep; 102 | end; 103 | 104 | procedure TForm1.VirtualCommandLineRedirector1Input(Sender: TObject; 105 | NewInput: AnsiString); 106 | var 107 | s: string; 108 | CharRange: TCharRange; 109 | OldScrollPos: Integer; 110 | Index: Integer; 111 | begin 112 | if NewInput <> '' then 113 | begin 114 | s := NewInput; 115 | // A new Command was issued 116 | if NewCommand then 117 | begin 118 | // The Command Shell sends a mystery #10 before the data for some reason 119 | // we need to strip it off 120 | Index := 1; 121 | while (Index < Length(s)) and ((s[Index] = #10) or (s[Index] = #13)) do 122 | begin 123 | s[Index] := ' '; 124 | Inc(Index); 125 | end; 126 | if Index > 1 then 127 | begin 128 | // If we found a line feed or carrage return then slide the rest of the 129 | // characters down and shorten the string. This should not cause a new 130 | // string to be allocated so it is very efficient 131 | MoveMemory(PChar(@s[1]), PChar(@s[Index]), Length(s) - (Index - 1)); 132 | SetLength(s, Length(s) - (Index - 1)) 133 | end 134 | end; 135 | Data := Data + VirtualCommandLineRedirector1.FormatData(PChar(s)); 136 | RichEdit1.SetFocus; 137 | OldScrollPos := GetScrollPos(RichEdit1.Handle, SB_VERT); 138 | SendMessage(RichEdit1.Handle, WM_SETREDRAW, 0, 0); 139 | SendMessage(RichEdit1.Handle, WM_SETTEXT, 0, LPARAM(PChar(Data))); 140 | SendMessage(RichEdit1.Handle, WM_VSCROLL, WPARAM(MakeLong(SB_THUMBPOSITION, OldScrollPos)), 0); 141 | SendMessage(RichEdit1.Handle, WM_SETREDRAW, 1, 0); 142 | InvalidateRect(RichEdit1.Handle, nil, False); 143 | UpdateWindow(RichEdit1.Handle); 144 | CharRange.cpMin := Length(Data); 145 | CharRange.cpMax := Length(Data); 146 | SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LPARAM(@CharRange)); 147 | SendMessage(RichEdit1.Handle, EM_SCROLLCARET, 0, 0); 148 | 149 | // Scroll down until we stop scrolling 150 | // In XP and Win2k the EM_SCROLLCARET does not do anything! 151 | while LoWord(SendMessage(RichEdit1.Handle, EM_SCROLL, SB_LINEDOWN, 0)) > 0 do 152 | end; 153 | NewCommand := False; 154 | end; 155 | 156 | procedure TForm1.FormDestroy(Sender: TObject); 157 | begin 158 | // NOTE: Calling Kill forces the Process to die using TerminateProcess. 159 | // In Win9x this usually leaves the 16 bit wrapper "WinOldApp" running 160 | // in the task list. If this process is orphaned Win9x will not shut 161 | // down. It is best to use the correct input to the child process to 162 | // cause it to terminate itself 163 | // 164 | VirtualCommandLineRedirector1.Kill; 165 | end; 166 | 167 | procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 168 | begin 169 | CanClose := not VirtualCommandLineRedirector1.Running; 170 | if not CanClose then 171 | begin 172 | ShowMessage('Please type "Exit" at the command line to exit shell'); 173 | end 174 | end; 175 | 176 | end. 177 | -------------------------------------------------------------------------------- /Demos/Explorer CheckBoxes/ExplorerCheckboxes.dpr: -------------------------------------------------------------------------------- 1 | program ExplorerCheckboxes; 2 | 3 | 4 | 5 | 6 | 7 | uses 8 | Forms, 9 | Unit1 in 'Unit1.pas' {Form1}, 10 | InfoForm in 'InfoForm.pas' {FormInfo}, 11 | VirtualCheckboxesSynchronizer in 'VirtualCheckboxesSynchronizer.pas'; 12 | 13 | {$R *.res} 14 | 15 | begin 16 | Application.Initialize; 17 | Application.CreateForm(TForm1, Form1); 18 | Application.Run; 19 | end. 20 | 21 | -------------------------------------------------------------------------------- /Demos/Explorer CheckBoxes/ExplorerCheckboxes.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Explorer CheckBoxes/ExplorerCheckboxes.res -------------------------------------------------------------------------------- /Demos/Explorer CheckBoxes/Tree.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Explorer CheckBoxes/Tree.dat -------------------------------------------------------------------------------- /Demos/File Search/FileSearch.dpr: -------------------------------------------------------------------------------- 1 | program FileSearch; 2 | 3 | uses 4 | Forms, 5 | uWndSearchFiles in 'uWndSearchFiles.pas' {WndSearchFiles}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TWndSearchFiles, WndSearchFiles); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/File Search/ReadMe.txt: -------------------------------------------------------------------------------- 1 | This simple file search demo demonstrates how files from 2 | different folders can be shown in a TVirtualExplorerListview 3 | 4 | The demo makes use of TFindFile, an excellent freeware component 5 | created by Kambiz R. Khojasteh. TFindFile can be found in FindFile.pas. 6 | See http://www.delphiarea.com for further information and updates. 7 | 8 | The TFindFile component is dynamically created and need no separate 9 | package installation. 10 | 11 | Known issues 12 | ------------ 13 | - The context menu handling is in beta stage 14 | - Status in Statusbar is not affected when files are deleted/created by another app 15 | -------------------------------------------------------------------------------- /Demos/FileSearch/FileSearchProject.dpr: -------------------------------------------------------------------------------- 1 | program FileSearchProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/FolderSize/FolderSizeDemo.dpr: -------------------------------------------------------------------------------- 1 | program FolderSizeDemo; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/FolderSize/FolderSizeDemo.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/FolderSize/FolderSizeDemo.res -------------------------------------------------------------------------------- /Demos/FolderSize/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 281 3 | Top = 212 4 | Caption = 'Form1' 5 | ClientHeight = 425 6 | ClientWidth = 633 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnCreate = FormCreate 15 | PixelsPerInch = 96 16 | TextHeight = 13 17 | object VirtualExplorerTree1: TVirtualExplorerTree 18 | Left = 0 19 | Top = 129 20 | Width = 633 21 | Height = 296 22 | Active = True 23 | Align = alClient 24 | ButtonFillMode = fmShaded 25 | ColumnDetails = cdUser 26 | ColumnMenuItemCount = 8 27 | DefaultNodeHeight = 17 28 | DragHeight = 250 29 | DragWidth = 150 30 | DrawSelectionMode = smBlendedRectangle 31 | FileSizeFormat = fsfExplorer 32 | FileSort = fsFileType 33 | Header.AutoSizeIndex = -1 34 | Header.Font.Charset = DEFAULT_CHARSET 35 | Header.Font.Color = clWindowText 36 | Header.Font.Height = -11 37 | Header.Font.Name = 'MS Shell Dlg 2' 38 | Header.Font.Style = [] 39 | Header.Options = [hoColumnResize, hoDrag, hoVisible] 40 | HintAnimation = hatNone 41 | HintMode = hmHint 42 | ParentColor = False 43 | RootFolder = rfDesktop 44 | TabOrder = 0 45 | TabStop = True 46 | TreeOptions.PaintOptions = [toShowButtons, toShowHorzGridLines, toShowRoot, toShowTreeLines, toThemeAware, toUseBlendedImages] 47 | TreeOptions.VETShellOptions = [toRightAlignSizeColumn, toContextMenus] 48 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 49 | TreeOptions.VETMiscOptions = [toExecuteOnDblClk] 50 | TreeOptions.VETImageOptions = [toImages] 51 | OnBeforeCellPaint = VirtualExplorerTree1BeforeCellPaint 52 | OnExpanded = VirtualExplorerTree1Expanded 53 | OnGetVETText = VirtualExplorerTree1GetVETText 54 | Columns = < 55 | item 56 | Position = 0 57 | Width = 300 58 | ColumnDetails = cdFileName 59 | WideText = 'Folder' 60 | end 61 | item 62 | Position = 1 63 | Width = 200 64 | ColumnDetails = cdCustom 65 | WideText = 'Relative Size' 66 | end> 67 | end 68 | object Panel1: TPanel 69 | Left = 0 70 | Top = 0 71 | Width = 633 72 | Height = 33 73 | Align = alTop 74 | BevelInner = bvSpace 75 | BevelOuter = bvLowered 76 | TabOrder = 1 77 | object Label1: TLabel 78 | Left = 221 79 | Top = 9 80 | Width = 55 81 | Height = 13 82 | Caption = 'Size Format' 83 | end 84 | object Bevel1: TBevel 85 | Left = 368 86 | Top = 1 87 | Width = 9 88 | Height = 31 89 | Shape = bsLeftLine 90 | end 91 | object CheckBox1: TCheckBox 92 | Left = 8 93 | Top = 8 94 | Width = 113 95 | Height = 17 96 | Caption = 'Recurse Folders' 97 | TabOrder = 0 98 | OnClick = CheckBox1Click 99 | end 100 | object ComboBox1: TComboBox 101 | Left = 280 102 | Top = 6 103 | Width = 81 104 | Height = 21 105 | Style = csDropDownList 106 | TabOrder = 1 107 | OnClick = ComboBox1Click 108 | Items.Strings = ( 109 | 'Byte' 110 | 'KB' 111 | 'MB' 112 | 'GB' 113 | 'Auto') 114 | end 115 | object CheckBox2: TCheckBox 116 | Left = 120 117 | Top = 8 118 | Width = 89 119 | Height = 17 120 | Caption = 'Gradient Bars' 121 | Checked = True 122 | State = cbChecked 123 | TabOrder = 2 124 | OnClick = CheckBox2Click 125 | end 126 | object CheckBox3: TCheckBox 127 | Left = 376 128 | Top = 8 129 | Width = 121 130 | Height = 17 131 | Caption = 'Read Floppy Drives' 132 | TabOrder = 3 133 | end 134 | object CheckBox4: TCheckBox 135 | Left = 496 136 | Top = 8 137 | Width = 137 138 | Height = 17 139 | Caption = 'Read Removable Drives' 140 | TabOrder = 4 141 | end 142 | end 143 | object Memo1: TMemo 144 | Left = 0 145 | Top = 33 146 | Width = 633 147 | Height = 96 148 | Align = alTop 149 | BorderStyle = bsNone 150 | Color = clInfoBk 151 | Lines.Strings = ( 152 | 153 | 'The demo shows folder sizes and presents them in a separate colu' + 154 | 'mn as a bar chart.' 155 | 156 | 'The bar represents the corresponding percentage of the total amo' + 157 | 'unt of bytes in the tree branch.' 158 | 'If the size is 0 no bar is shown at all.' 159 | 160 | 'The caption format is controlled by the "Size Format" combobox, ' + 161 | 'the sizes can be shown as bytes, KB, MB, GB or it can ' 162 | 'be automatically formated.' 163 | 164 | 'When "Recurse Folder" is checked the size will be the total of t' + 165 | 'he directory plus its subdirs; otherwise it will represent only ' 166 | 'the immediate files in the directory.' 167 | 168 | 'When "Gradient Bars" are not used the bars are painted in red if' + 169 | ' they are 100% full.' 170 | '' 171 | 'This demo shows you how to:' 172 | 173 | ' - Create a custom column, setting its caption and custom drawin' + 174 | 'g it.' 175 | ' - Work with file sizes, and formating them to a string.' 176 | ' - Get the size of a particular directory.' 177 | 178 | ' - Get the total size of a tree branch, and set a percentage for' + 179 | ' each of the children.') 180 | ReadOnly = True 181 | ScrollBars = ssVertical 182 | TabOrder = 2 183 | end 184 | end 185 | -------------------------------------------------------------------------------- /Demos/KnownFolders/KnwonwFoldersProject.dpr: -------------------------------------------------------------------------------- 1 | program KnwonwFoldersProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/KnownFolders/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 417 3 | Top = 155 4 | Caption = 'Form1' 5 | ClientHeight = 531 6 | ClientWidth = 718 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnCreate = FormCreate 15 | DesignSize = ( 16 | 718 17 | 531) 18 | PixelsPerInch = 96 19 | TextHeight = 13 20 | object Label1: TLabel 21 | Left = 296 22 | Top = 56 23 | Width = 85 24 | Height = 13 25 | Caption = 'Alias (Virtual) Path' 26 | end 27 | object Label2: TLabel 28 | Left = 296 29 | Top = 112 30 | Width = 41 31 | Height = 13 32 | Caption = 'File Path' 33 | end 34 | object Image1: TImage 35 | Left = 328 36 | Top = 176 37 | Width = 385 38 | Height = 345 39 | Transparent = True 40 | end 41 | object ListBox1: TListBox 42 | Left = 0 43 | Top = 0 44 | Width = 265 45 | Height = 531 46 | Align = alLeft 47 | ItemHeight = 13 48 | Items.Strings = ( 49 | 'FOLDERID_AddNewPrograms' 50 | 'FOLDERID_AdminTools' 51 | 'FOLDERID_AppUpdates' 52 | 'FOLDERID_CDBurning' 53 | 'FOLDERID_ChangeRemovePrograms' 54 | 'FOLDERID_CommonAdminTools' 55 | 'FOLDERID_CommonOEMLinks' 56 | 'FOLDERID_CommonPrograms' 57 | 'FOLDERID_CommonStartMenu' 58 | 'FOLDERID_CommonStartup' 59 | 'FOLDERID_CommonTemplates' 60 | 'FOLDERID_ComputerFolder' 61 | 'FOLDERID_ConflictFolder' 62 | 'FOLDERID_ConnectionsFolder' 63 | 'FOLDERID_Contacts' 64 | 'FOLDERID_ControlPanelFolder' 65 | 'FOLDERID_Cookies' 66 | 'FOLDERID_Desktop' 67 | 'FOLDERID_DeviceMetadataStore' 68 | 'FOLDERID_DocumentsLibrary' 69 | 'FOLDERID_Downloads' 70 | 'FOLDERID_Favorites' 71 | 'FOLDERID_Fonts' 72 | 'FOLDERID_Games' 73 | 'FOLDERID_GameTasks' 74 | 'FOLDERID_History' 75 | 'FOLDERID_HomeGroup' 76 | 'FOLDERID_ImplicitAppShortcuts' 77 | 'FOLDERID_InternetCache' 78 | 'FOLDERID_InternetFolder' 79 | 'FOLDERID_Libraries' 80 | 'FOLDERID_Links' 81 | 'FOLDERID_LocalAppData' 82 | 'FOLDERID_LocalAppDataLow' 83 | 'FOLDERID_LocalizedResourcesDir' 84 | 'FOLDERID_Music' 85 | 'FOLDERID_MusicLibrary' 86 | 'FOLDERID_NetworkFolder' 87 | 'FOLDERID_OriginalImages' 88 | 'FOLDERID_PhotoAlbums' 89 | 'FOLDERID_PicturesLibrary' 90 | 'FOLDERID_Pictures' 91 | 'FOLDERID_Playlists' 92 | 'FOLDERID_PrintersFolder' 93 | 'FOLDERID_PrintHood' 94 | 'FOLDERID_Profile' 95 | 'FOLDERID_ProgramData' 96 | 'FOLDERID_ProgramFiles' 97 | 'FOLDERID_ProgramFilesX64' 98 | 'FOLDERID_ProgramFilesX86' 99 | 'FOLDERID_ProgramFilesCommon' 100 | 'FOLDERID_ProgramFilesCommonX64' 101 | 'FOLDERID_ProgramFilesCommonX86' 102 | 'FOLDERID_Programs' 103 | 'FOLDERID_Public' 104 | 'FOLDERID_PublicDesktop' 105 | 'FOLDERID_PublicDocuments' 106 | 'FOLDERID_PublicDownloads' 107 | 'FOLDERID_PublicGameTasks' 108 | 'FOLDERID_PublicLibraries' 109 | 'FOLDERID_PublicMusic' 110 | 'FOLDERID_PublicPictures' 111 | 'FOLDERID_PublicRingtones' 112 | 'FOLDERID_PublicVideos' 113 | 'FOLDERID_QuickLaunch' 114 | 'FOLDERID_Recent' 115 | 'FOLDERID_RecordedTV' 116 | 'FOLDERID_RecordedTVLibrary' 117 | 'FOLDERID_RecycleBinFolder' 118 | 'FOLDERID_ResourceDir' 119 | 'FOLDERID_Ringtones' 120 | 'FOLDERID_RoamingAppData' 121 | 'FOLDERID_SampleMusic' 122 | 'FOLDERID_SamplePictures' 123 | 'FOLDERID_SamplePlaylists' 124 | 'FOLDERID_SampleVideos' 125 | 'FOLDERID_SavedGames' 126 | 'FOLDERID_SavedSearches' 127 | 'FOLDERID_SEARCH_CSC' 128 | 'FOLDERID_SEARCH_MAPI' 129 | 'FOLDERID_SearchHome' 130 | 'FOLDERID_SendTo' 131 | 'FOLDERID_SidebarDefaultParts' 132 | 'FOLDERID_SidebarParts' 133 | 'FOLDERID_StartMenu' 134 | 'FOLDERID_Startup' 135 | 'FOLDERID_SyncManagerFolder' 136 | 'FOLDERID_SyncResultsFolder' 137 | 'FOLDERID_SyncSetupFolder' 138 | 'FOLDERID_System' 139 | 'FOLDERID_SystemX86' 140 | 'FOLDERID_Templates' 141 | 'FOLDERID_TreeProperties' 142 | 'FOLDERID_UserPinned' 143 | 'FOLDERID_UserProfiles' 144 | 'FOLDERID_UserProgramFiles' 145 | 'FOLDERID_UserProgramFilesCommon' 146 | 'FOLDERID_UsersFiles' 147 | 'FOLDERID_UsersLibraries' 148 | 'FOLDERID_Videos' 149 | 'FOLDERID_VideosLibrary' 150 | 'FOLDERID_Windows') 151 | TabOrder = 0 152 | OnClick = ListBox1Click 153 | end 154 | object CheckBoxExists: TCheckBox 155 | Left = 296 156 | Top = 24 157 | Width = 73 158 | Height = 17 159 | Caption = 'Exists' 160 | TabOrder = 1 161 | end 162 | object EditAliasPath: TEdit 163 | Left = 328 164 | Top = 80 165 | Width = 372 166 | Height = 21 167 | Anchors = [akLeft, akTop, akRight] 168 | TabOrder = 2 169 | Text = 'EditAliasPath' 170 | end 171 | object EditFilePath: TEdit 172 | Left = 328 173 | Top = 136 174 | Width = 372 175 | Height = 21 176 | Anchors = [akLeft, akTop, akRight] 177 | TabOrder = 3 178 | Text = 'EditFilePath' 179 | end 180 | end 181 | -------------------------------------------------------------------------------- /Demos/Namespace Browser/NamespaceBrowserProject.dpr: -------------------------------------------------------------------------------- 1 | program NamespaceBrowserProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Namespace Browser/NamespaceBrowserProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Namespace Browser/NamespaceBrowserProject.res -------------------------------------------------------------------------------- /Demos/Overview/Unit1.dfm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Overview/Unit1.dfm -------------------------------------------------------------------------------- /Demos/Overview/VET.dpr: -------------------------------------------------------------------------------- 1 | // JCL_DEBUG_EXPERT_GENERATEJDBG OFF 2 | // JCL_DEBUG_EXPERT_INSERTJDBG OFF 3 | // JCL_DEBUG_EXPERT_DELETEMAPFILE OFF 4 | program VET; 5 | 6 | uses 7 | Forms, 8 | Unit1 in 'Unit1.pas' {Form1}, 9 | InfoForm in 'InfoForm.pas' {Form2}; 10 | 11 | {$R *.RES} 12 | 13 | begin 14 | Application.Initialize; 15 | Application.CreateForm(TForm1, Form1); 16 | Application.CreateForm(TFormInfo, FormInfo); 17 | Application.Run; 18 | end. 19 | -------------------------------------------------------------------------------- /Demos/Overview/VET.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Overview/VET.res -------------------------------------------------------------------------------- /Demos/Overview/VETBkgnd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Overview/VETBkgnd.bmp -------------------------------------------------------------------------------- /Demos/PrevDirNode EasyListview/EasyListviewPrevFolderProject.dpr: -------------------------------------------------------------------------------- 1 | program EasyListviewPrevFolderProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/PrevDirNode EasyListview/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 100 3 | Top = 89 4 | Caption = 'Form1' 5 | ClientHeight = 349 6 | ClientWidth = 741 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object LV: TVirtualExplorerEasyListview 17 | Left = 0 18 | Top = 56 19 | Width = 741 20 | Height = 250 21 | Active = True 22 | Align = alClient 23 | BevelKind = bkTile 24 | CompressedFile.Color = clRed 25 | CompressedFile.Font.Charset = DEFAULT_CHARSET 26 | CompressedFile.Font.Color = clWindowText 27 | CompressedFile.Font.Height = -11 28 | CompressedFile.Font.Name = 'MS Shell Dlg 2' 29 | CompressedFile.Font.Style = [] 30 | DefaultSortColumn = 0 31 | EditManager.Font.Charset = DEFAULT_CHARSET 32 | EditManager.Font.Color = clWindowText 33 | EditManager.Font.Height = -11 34 | EditManager.Font.Name = 'MS Shell Dlg 2' 35 | EditManager.Font.Style = [] 36 | EncryptedFile.Color = 32832 37 | EncryptedFile.Font.Charset = DEFAULT_CHARSET 38 | EncryptedFile.Font.Color = clWindowText 39 | EncryptedFile.Font.Height = -11 40 | EncryptedFile.Font.Name = 'MS Shell Dlg 2' 41 | EncryptedFile.Font.Style = [] 42 | FileSizeFormat = vfsfDefault 43 | Font.Charset = DEFAULT_CHARSET 44 | Font.Color = clWindowText 45 | Font.Height = -11 46 | Font.Name = 'MS Shell Dlg 2' 47 | Font.Style = [] 48 | Grouped = False 49 | GroupingColumn = 0 50 | GroupFont.Charset = DEFAULT_CHARSET 51 | GroupFont.Color = clWindowText 52 | GroupFont.Height = -11 53 | GroupFont.Name = 'MS Shell Dlg 2' 54 | GroupFont.Style = [] 55 | Header.Font.Charset = DEFAULT_CHARSET 56 | Header.Font.Color = clWindowText 57 | Header.Font.Height = -11 58 | Header.Font.Name = 'MS Shell Dlg 2' 59 | Header.Font.Style = [] 60 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 61 | PaintInfoGroup.MarginTop.Visible = False 62 | ParentFont = False 63 | Sort.Algorithm = esaQuickSort 64 | Sort.AutoSort = True 65 | TabOrder = 0 66 | ThumbsManager.StorageFilename = 'Thumbnails.album' 67 | OnItemCompare = LVItemCompare 68 | OnItemGetCaption = LVItemGetCaption 69 | OnRootRebuild = LVRootRebuild 70 | end 71 | object Panel1: TPanel 72 | Left = 0 73 | Top = 0 74 | Width = 741 75 | Height = 56 76 | Align = alTop 77 | TabOrder = 1 78 | object ComboBox1: TComboBox 79 | Left = 16 80 | Top = 18 81 | Width = 145 82 | Height = 21 83 | Style = csDropDownList 84 | ItemIndex = 0 85 | TabOrder = 0 86 | Text = 'elsIcon' 87 | OnClick = ComboBox1Click 88 | Items.Strings = ( 89 | 'elsIcon' 90 | 'elsSmallIcon' 91 | 'elsList' 92 | 'elsReport' 93 | 'elsThumbnail' 94 | 'elsTile' 95 | 'elsFilmStrip' 96 | 'elsGrid') 97 | end 98 | end 99 | object Memo1: TMemo 100 | Left = 0 101 | Top = 306 102 | Width = 741 103 | Height = 43 104 | Align = alBottom 105 | Color = clInfoBk 106 | Lines.Strings = ( 107 | 108 | 'This demo shows you how to add the [..] dir to the VirtualExplor' + 109 | 'erEasyListview') 110 | ReadOnly = True 111 | TabOrder = 2 112 | end 113 | end 114 | -------------------------------------------------------------------------------- /Demos/PrevDirNode EasyListview/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, MPCommonObjects, EasyListview, VirtualExplorerEasyListview, 8 | MPShellUtilities, SHlObj, ExtCtrls; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | LV: TVirtualExplorerEasyListview; 13 | Panel1: TPanel; 14 | ComboBox1: TComboBox; 15 | Memo1: TMemo; 16 | function LVItemCompare(Sender: TCustomEasyListview; Column: TEasyColumn; 17 | Group: TEasyGroup; Item1, Item2: TEasyItem; 18 | var DoDefault: Boolean): Integer; 19 | procedure LVRootRebuild(Sender: TCustomVirtualExplorerEasyListview); 20 | procedure LVItemGetCaption(Sender: TCustomEasyListview; Item: TEasyItem; 21 | Column: Integer; var Caption: string); 22 | procedure ComboBox1Click(Sender: TObject); 23 | private 24 | { Private declarations } 25 | public 26 | { Public declarations } 27 | FZombieItem: TExplorerItem; 28 | end; 29 | 30 | var 31 | Form1: TForm1; 32 | 33 | implementation 34 | 35 | {$R *.dfm} 36 | 37 | //WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM 38 | { Helpers } 39 | 40 | function GetPrevNamespace(NS: TNamespace): TNamespace; 41 | var 42 | PIDL: PItemIDList; 43 | begin 44 | Result := nil; 45 | if Assigned(NS) and (not NS.IsDesktop) then begin 46 | PIDL := PIDLMgr.CopyPIDL(NS.AbsolutePIDL); 47 | PIDLMgr.StripLastID(PIDL); 48 | Result := TNamespace.Create(PIDL, nil); 49 | Result.FreePIDLOnDestroy := True; // TNamespace will destroy the PIDL 50 | end; 51 | end; 52 | 53 | //WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM 54 | { LV } 55 | 56 | procedure TForm1.ComboBox1Click(Sender: TObject); 57 | begin 58 | LV.View := TEasyListStyle(Combobox1.ItemIndex); 59 | end; 60 | 61 | function TForm1.LVItemCompare(Sender: TCustomEasyListview; Column: TEasyColumn; 62 | Group: TEasyGroup; Item1, Item2: TEasyItem; var DoDefault: Boolean): Integer; 63 | // Place the ZombieItem on the top of the listview 64 | begin 65 | Result := 0; 66 | if Assigned(FZombieItem) then 67 | if FZombieItem = Item1 then begin 68 | Result := -1; 69 | DoDefault := False; 70 | end else 71 | if FZombieItem = Item2 then begin 72 | Result := 1; 73 | DoDefault := False; 74 | end; 75 | end; 76 | 77 | procedure TForm1.LVItemGetCaption(Sender: TCustomEasyListview; Item: TEasyItem; 78 | Column: Integer; var Caption: string); 79 | // Change the caption of the ZombieItem 80 | begin 81 | if Assigned(FZombieItem) and (FZombieItem = Item) and (Column = 0) then 82 | Caption := '[..]'; 83 | end; 84 | 85 | procedure TForm1.LVRootRebuild(Sender: TCustomVirtualExplorerEasyListview); 86 | var 87 | NS: TNamespace; 88 | begin 89 | FZombieItem := nil; 90 | // First we should create the Namespace that will represent the '..' dir. 91 | // Simply get the parent level namespace 92 | NS := GetPrevNamespace(LV.RootFolderNamespace); 93 | if Assigned(NS) then begin 94 | // Now create the ZombieNode and sort the tree 95 | FZombieItem := LV.AddCustomItem(nil, NS, True); 96 | LV.SortList; 97 | end; 98 | end; 99 | 100 | end. 101 | -------------------------------------------------------------------------------- /Demos/PrevDirNode/Project1.dpr: -------------------------------------------------------------------------------- 1 | program Project1; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/PrevDirNode/Project1.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/PrevDirNode/Project1.res -------------------------------------------------------------------------------- /Demos/PrevDirNode/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 252 3 | Top = 138 4 | Width = 696 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnShow = FormShow 15 | PixelsPerInch = 96 16 | TextHeight = 13 17 | object Splitter1: TSplitter 18 | Left = 200 19 | Top = 41 20 | Height = 362 21 | end 22 | object VET: TVirtualExplorerTreeview 23 | Left = 0 24 | Top = 41 25 | Width = 200 26 | Height = 362 27 | Active = False 28 | Align = alLeft 29 | ColumnDetails = cdUser 30 | DefaultNodeHeight = 17 31 | DragHeight = 250 32 | DragWidth = 150 33 | FileSizeFormat = fsfExplorer 34 | FileSort = fsFileType 35 | Header.AutoSizeIndex = 0 36 | Header.Font.Charset = DEFAULT_CHARSET 37 | Header.Font.Color = clWindowText 38 | Header.Font.Height = -11 39 | Header.Font.Name = 'MS Shell Dlg 2' 40 | Header.Font.Style = [] 41 | Header.MainColumn = -1 42 | Header.Options = [hoColumnResize, hoDrag] 43 | HintMode = hmHint 44 | ParentColor = False 45 | RootFolder = rfDesktop 46 | TabOrder = 0 47 | TabStop = True 48 | TreeOptions.AutoOptions = [toAutoScroll] 49 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toToggleOnDblClick] 50 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages, toGhostedIfUnfocused] 51 | TreeOptions.SelectionOptions = [toMultiSelect, toSiblingSelectConstraint] 52 | TreeOptions.VETShellOptions = [toContextMenus] 53 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 54 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toChangeNotifierThread, toRemoveContextMenuShortCut] 55 | TreeOptions.VETImageOptions = [toImages, toThreadedImages, toMarkCutAndCopy] 56 | Columns = <> 57 | end 58 | object Memo1: TMemo 59 | Left = 0 60 | Top = 403 61 | Width = 688 62 | Height = 43 63 | Align = alBottom 64 | Color = clInfoBk 65 | Lines.Strings = ( 66 | 67 | 'This demo shows you how to add the [..] dir to the VirtualExplor' + 68 | 'erListviewEx') 69 | ReadOnly = True 70 | TabOrder = 1 71 | end 72 | object Panel1: TPanel 73 | Left = 0 74 | Top = 0 75 | Width = 688 76 | Height = 41 77 | Align = alTop 78 | BevelInner = bvRaised 79 | BevelOuter = bvLowered 80 | TabOrder = 2 81 | object ComboBox1: TComboBox 82 | Left = 8 83 | Top = 8 84 | Width = 145 85 | Height = 21 86 | Style = csDropDownList 87 | ItemHeight = 13 88 | TabOrder = 0 89 | OnClick = ComboBox1Click 90 | Items.Strings = ( 91 | 'vsxIcon' 92 | 'vsxSmallIcon' 93 | 'vsxList' 94 | 'vsxReport' 95 | 'vsxThumbs') 96 | end 97 | end 98 | end 99 | -------------------------------------------------------------------------------- /Demos/PrevDirNode/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, ExtCtrls, VirtualExplorerTree, VirtualTrees, 8 | VirtualExplorerListviewEx, VirtualShellUtilities, SHlObj, 9 | VirtualShellNotifier; 10 | 11 | type 12 | TMyLV = class(TVirtualExplorerListviewEx) 13 | protected 14 | FZombieNode: PVirtualNode; 15 | procedure AddZombie; 16 | procedure RemoveZombie; 17 | function DoCompare(Node1: PVirtualNode; Node2: PVirtualNode; Column: TColumnIndex): Integer; override; 18 | procedure DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: string); override; 19 | procedure DoRootChanging(const NewRoot: TRootFolder; Namespace: TNamespace; var Allow: Boolean); override; 20 | procedure DoRootRebuild; override; 21 | procedure ReReadAndRefreshNode(Node: PVirtualNode; SortNode: Boolean); override; 22 | public 23 | constructor Create(AOwner: TComponent); override; 24 | destructor Destroy; override; 25 | end; 26 | 27 | TForm1 = class(TForm) 28 | VET: TVirtualExplorerTreeview; 29 | Splitter1: TSplitter; 30 | Memo1: TMemo; 31 | Panel1: TPanel; 32 | ComboBox1: TComboBox; 33 | procedure FormShow(Sender: TObject); 34 | procedure ComboBox1Click(Sender: TObject); 35 | private 36 | { Private declarations } 37 | public 38 | { Public declarations } 39 | MyLV: TMyLV; 40 | end; 41 | 42 | var 43 | Form1: TForm1; 44 | 45 | implementation 46 | 47 | {$R *.dfm} 48 | 49 | function GetPrevNamespace(NS: TNamespace): TNamespace; 50 | var 51 | PIDL: PItemIDList; 52 | begin 53 | Result := nil; 54 | if Assigned(NS) and (not NS.IsDesktop) then begin 55 | PIDL := PIDLMgr.CopyPIDL(NS.AbsolutePIDL); 56 | PIDLMgr.StripLastID(PIDL); 57 | Result := TNamespace.Create(PIDL, nil); 58 | Result.FreePIDLOnDestroy := True; // the namespace will destroy the PIDL 59 | end; 60 | end; 61 | 62 | //WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM 63 | { Form } 64 | 65 | procedure TForm1.FormShow(Sender: TObject); 66 | begin 67 | MyLV := TMyLV.Create(Self); 68 | MyLV.Parent := Self; 69 | MyLV.Align := alClient; 70 | MyLV.VirtualExplorerTreeview := VET; 71 | VET.VirtualExplorerListview := MyLV; 72 | 73 | // It's a good practice to activate the tree and the listview when the form 74 | // is about to be showed. 75 | VET.Active := True; 76 | MyLV.Active := True; 77 | ComboBox1.ItemIndex := 4; 78 | end; 79 | 80 | procedure TForm1.ComboBox1Click(Sender: TObject); 81 | begin 82 | MyLV.ViewStyle := TViewStyleEx(Combobox1.ItemIndex); 83 | end; 84 | 85 | //WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM 86 | { TMyLV } 87 | 88 | procedure TMyLV.AddZombie; 89 | var 90 | NS: TNamespace; 91 | begin 92 | // First we should create the Namespace that will represent the '..' dir. 93 | // Simply get the parent level namespace 94 | NS := GetPrevNamespace(RootFolderNamespace); 95 | if Assigned(NS) then begin 96 | // Now create the ZombieNode and sort the tree 97 | FZombieNode := AddCustomNode(RootNode, NS, False); 98 | SortTree(Header.SortColumn, Header.SortDirection); 99 | end; 100 | end; 101 | 102 | constructor TMyLV.Create(AOwner: TComponent); 103 | begin 104 | inherited; 105 | // We are going to use Custom sorting to sort the ZombieNode to the top of 106 | // file list. 107 | TreeOptions.VETMiscOptions := TreeOptions.VETMiscOptions + [toUserSort]; 108 | end; 109 | 110 | destructor TMyLV.Destroy; 111 | begin 112 | FZombieNode := nil; 113 | inherited; 114 | end; 115 | 116 | function TMyLV.DoCompare(Node1, Node2: PVirtualNode; 117 | Column: TColumnIndex): Integer; 118 | // DoCompareNodes is called every time the tree/listview must sort the items. 119 | // There is one minor difference between VT and VET in the use of this event, 120 | // in VET you should activate toUserSort in the TreeOptions.VETMiscOptions to 121 | // to make it work. 122 | var 123 | NS1, NS2: TNamespace; 124 | begin 125 | Result := 0; 126 | if ValidateNamespace(Node1, NS1) and ValidateNamespace(Node2, NS2) then begin 127 | Result := SortHelper.CompareIDSort(Column, NS1, NS2); 128 | // Sort the '..' dir to be the first in the list 129 | if Assigned(FZombieNode) then 130 | if Header.SortDirection = sdAscending then begin 131 | if Node1 = FZombieNode then Result := -1 132 | else if Node2 = FZombieNode then Result := 1; 133 | end 134 | else begin 135 | if Node1 = FZombieNode then Result := 1 136 | else if Node2 = FZombieNode then Result := -1; 137 | end; 138 | end; 139 | end; 140 | 141 | procedure TMyLV.DoGetText(Node: PVirtualNode; Column: TColumnIndex; 142 | TextType: TVSTTextType; var Text: string); 143 | // The change the ZombieNode caption to '[..]' 144 | begin 145 | inherited; 146 | if Assigned(FZombieNode) and (Node = FZombieNode) then 147 | if Column < 1 then 148 | Text := '[..]' 149 | else 150 | Text := ''; 151 | end; 152 | 153 | procedure TMyLV.DoRootChanging(const NewRoot: TRootFolder; 154 | Namespace: TNamespace; var Allow: Boolean); 155 | begin 156 | // DoRootChanging is called when the directory is about to change 157 | // Use this event to clear the ZombieNode 158 | inherited; 159 | FZombieNode := nil; 160 | end; 161 | 162 | procedure TMyLV.DoRootRebuild; 163 | begin 164 | // DoRootRebuild is called every time the actual directory must be rebuilt. 165 | // For example when the directory changes or F5 is pressed. 166 | // We can use this event to create the ZombieNode representing the '..' dir. 167 | inherited; 168 | AddZombie; 169 | end; 170 | 171 | procedure TMyLV.RemoveZombie; 172 | begin 173 | DeleteNode(FZombieNode, True); 174 | FZombieNode := nil; 175 | end; 176 | 177 | procedure TMyLV.ReReadAndRefreshNode(Node: PVirtualNode; SortNode: Boolean); 178 | begin 179 | RemoveZombie; 180 | inherited; 181 | AddZombie; 182 | end; 183 | 184 | end. 185 | -------------------------------------------------------------------------------- /Demos/Readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Welcome to the VirtualShellTools Demo Folder! 4 | 5 | These are the Demo supplied with VirtualShellTools. If you want to compile all the demos at once then use the *.bpg file supplied in this folder. 6 | VirtualShellToolsDemos.bpg - All the Demos having to do with VirtualShellTools 7 | 8 | In order to build the package open the *.bpg file with Delphi. Answer yes to *all* the annoying quesions about recreating the resource file. Go to 9 | 10 | View -> ProjectManager 11 | 12 | You should see all the demos in the Listview. Use the dropdown list and select the first item in the list. Delphi will open the project. Close the project. All you need is the original ProjectManager but with the first demo selected in the dropdown list. Now go to 13 | 14 | Project -> Compile All Projects 15 | 16 | Delphi will start churning away compiling all the projects in the list. 17 | 18 | Go to the Demos folder and start seeing what VirtualShellTools can do for you. 19 | 20 | Jim Kueneman 7.20.2002 -------------------------------------------------------------------------------- /Demos/SendTo Menu/Back.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/SendTo Menu/Back.bmp -------------------------------------------------------------------------------- /Demos/SendTo Menu/Fwd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/SendTo Menu/Fwd.bmp -------------------------------------------------------------------------------- /Demos/SendTo Menu/SendToMenuProject.dpr: -------------------------------------------------------------------------------- 1 | program SendToMenuProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/SendTo Menu/SendToMenuProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/SendTo Menu/SendToMenuProject.res -------------------------------------------------------------------------------- /Demos/SendTo Menu/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 7 | Dialogs, Menus, ImgList, ActiveX, ComCtrls, ToolWin, 8 | VirtualTrees, VirtualExplorerTree, MPShellUtilities, 9 | VirtualSendToMenu; 10 | 11 | type 12 | TForm1 = class(TForm) 13 | VirtualSendToMenu1: TVirtualSendToMenu; 14 | VirtualExplorerListview1: TVirtualExplorerListview; 15 | ToolBar1: TToolBar; 16 | ToolButton1: TToolButton; 17 | ToolButton2: TToolButton; 18 | ToolButton3: TToolButton; 19 | ImageList1: TImageList; 20 | procedure VirtualExplorerListview1Change(Sender: TBaseVirtualTree; 21 | Node: PVirtualNode); 22 | procedure VirtualExplorerListview1RootChange( 23 | Sender: TCustomVirtualExplorerTree); 24 | procedure ToolButton3Click(Sender: TObject); 25 | procedure ToolButton2Click(Sender: TObject); 26 | procedure VirtualSendToMenu1SendToEvent(Sender: TVirtualSendToMenu; 27 | SendToTarget: TNamespace; var SourceData: IDataObject); 28 | procedure FormShow(Sender: TObject); 29 | private 30 | { Private declarations } 31 | public 32 | { Public declarations } 33 | end; 34 | 35 | var 36 | Form1: TForm1; 37 | 38 | implementation 39 | 40 | {$R *.dfm} 41 | 42 | procedure TForm1.FormShow(Sender: TObject); 43 | begin 44 | VirtualExplorerListview1.Active := True; 45 | end; 46 | 47 | procedure TForm1.VirtualExplorerListview1Change(Sender: TBaseVirtualTree; 48 | Node: PVirtualNode); 49 | var 50 | NS: TNamespace; 51 | begin 52 | if VirtualExplorerListview1.ValidateNamespace(Node, NS) then 53 | begin 54 | ToolButton1.Enabled := NS.CanCopy; 55 | ToolButton3.Enabled := NS.Folder; 56 | ToolButton2.Enabled := not VirtualExplorerListview1.RootFolderNamespace.IsDesktop 57 | end 58 | end; 59 | 60 | procedure TForm1.VirtualExplorerListview1RootChange(Sender: TCustomVirtualExplorerTree); 61 | var 62 | NS: TNamespace; 63 | begin 64 | ToolButton2.Enabled := not VirtualExplorerListview1.RootFolderNamespace.IsDesktop; 65 | if VirtualExplorerListview1.ValidateNamespace(VirtualExplorerListview1.GetFirstSelected, NS) then 66 | begin 67 | ToolButton1.Enabled := NS.CanCopy; 68 | ToolButton3.Enabled := NS.Folder; 69 | end else 70 | begin 71 | ToolButton1.Enabled := False; 72 | ToolButton3.Enabled := False; 73 | end 74 | end; 75 | 76 | procedure TForm1.ToolButton3Click(Sender: TObject); 77 | begin 78 | VirtualExplorerListview1.BrowseToNextLevel; 79 | end; 80 | 81 | procedure TForm1.ToolButton2Click(Sender: TObject); 82 | begin 83 | VirtualExplorerListview1.BrowseToPrevLevel; 84 | end; 85 | 86 | procedure TForm1.VirtualSendToMenu1SendToEvent(Sender: TVirtualSendToMenu; 87 | SendToTarget: TNamespace; var SourceData: IDataObject); 88 | begin 89 | SourceData := VirtualExplorerListview1.SelectedToDataObject; 90 | end; 91 | 92 | end. 93 | -------------------------------------------------------------------------------- /Demos/SendTo Menu/folder.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/SendTo Menu/folder.bmp -------------------------------------------------------------------------------- /Demos/Shell History/ShellHistory.dpr: -------------------------------------------------------------------------------- 1 | program ShellHistory; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Shell History/ShellHistory.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Shell History/ShellHistory.res -------------------------------------------------------------------------------- /Demos/Shell Link Shortcuts/ShellLinkShortcuts.dpr: -------------------------------------------------------------------------------- 1 | program ShellLinkShortcuts; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Shell Link Shortcuts/ShellLinkShortcuts.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Shell Link Shortcuts/ShellLinkShortcuts.res -------------------------------------------------------------------------------- /Demos/Shell Notify/ShellNotify.dpr: -------------------------------------------------------------------------------- 1 | program ShellNotify; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}, 6 | Unit2 in 'Unit2.pas' {Form2}; 7 | 8 | {$R *.RES} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.CreateForm(TForm2, Form2); 14 | Application.Run; 15 | end. 16 | -------------------------------------------------------------------------------- /Demos/Shell Notify/ShellNotify.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Shell Notify/ShellNotify.res -------------------------------------------------------------------------------- /Demos/Shell Notify/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 183 3 | Top = 76 4 | Width = 568 5 | Height = 413 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | ShowHint = True 15 | OnCreate = FormCreate 16 | DesignSize = ( 17 | 552 18 | 377) 19 | PixelsPerInch = 96 20 | TextHeight = 13 21 | object Label1: TLabel 22 | Left = 10 23 | Top = 68 24 | Width = 111 25 | Height = 13 26 | Caption = 'Choose a Target Folder' 27 | end 28 | object Label2: TLabel 29 | Left = 16 30 | Top = 8 31 | Width = 116 32 | Height = 26 33 | Caption = 'Click button or right click on the Listview' 34 | WordWrap = True 35 | end 36 | object RadioGroupFileName: TRadioGroup 37 | Left = -6 38 | Top = 112 39 | Width = 543 40 | Height = 57 41 | Anchors = [akLeft, akTop, akRight] 42 | Caption = 'New Filename' 43 | ItemIndex = 0 44 | Items.Strings = ( 45 | 'Let VSTools create the filename' 46 | 'Use my filename (no extension necessary)') 47 | TabOrder = 1 48 | end 49 | object Button1: TButton 50 | Left = 18 51 | Top = 36 52 | Width = 121 53 | Height = 25 54 | Caption = 'ShellNew Menu' 55 | TabOrder = 0 56 | OnClick = Button1Click 57 | end 58 | object Edit1: TEdit 59 | Left = 266 60 | Top = 142 61 | Width = 263 62 | Height = 21 63 | Anchors = [akLeft, akTop, akRight] 64 | TabOrder = 2 65 | Text = 'My Custom Filename' 66 | end 67 | object GroupBox1: TGroupBox 68 | Left = 152 69 | Top = 8 70 | Width = 385 71 | Height = 57 72 | Caption = 'Options' 73 | TabOrder = 4 74 | object CheckBox1: TCheckBox 75 | Left = 136 76 | Top = 16 77 | Width = 121 78 | Height = 17 79 | Hint = 80 | 'Turning this option on mimics Explorer New menu. Explorer short' + 81 | 'ens the list for example HTML files should have a *.htm and a *h' + 82 | 'tml item. Not combining items will leave both in menu.' 83 | Caption = 'Combine Like Items' 84 | TabOrder = 0 85 | OnClick = CheckBox1Click 86 | end 87 | object CheckBox2: TCheckBox 88 | Left = 136 89 | Top = 32 90 | Width = 105 91 | Height = 17 92 | Caption = 'Use Shell Images' 93 | TabOrder = 1 94 | OnClick = CheckBox2Click 95 | end 96 | object CheckBox3: TCheckBox 97 | Left = 264 98 | Top = 16 99 | Width = 113 100 | Height = 17 101 | Caption = 'Warn on Overwrite' 102 | TabOrder = 2 103 | OnClick = CheckBox3Click 104 | end 105 | object CheckBox4: TCheckBox 106 | Left = 8 107 | Top = 16 108 | Width = 113 109 | Height = 17 110 | Caption = 'New Folder Item' 111 | TabOrder = 3 112 | OnClick = CheckBox4Click 113 | end 114 | object CheckBox5: TCheckBox 115 | Left = 8 116 | Top = 32 117 | Width = 113 118 | Height = 17 119 | Caption = 'New Shortcut Item' 120 | TabOrder = 4 121 | OnClick = CheckBox5Click 122 | end 123 | end 124 | object StatusBar1: TStatusBar 125 | Left = 0 126 | Top = 358 127 | Width = 552 128 | Height = 19 129 | Panels = < 130 | item 131 | Text = ' 0 Total Objects' 132 | Width = 150 133 | end 134 | item 135 | Text = ' 0 Objects Selected' 136 | Width = 50 137 | end> 138 | end 139 | end 140 | -------------------------------------------------------------------------------- /Demos/Shell Notify/Unit2.dfm: -------------------------------------------------------------------------------- 1 | object Form2: TForm2 2 | Left = 99 3 | Top = 372 4 | Width = 645 5 | Height = 312 6 | BorderStyle = bsSizeToolWin 7 | Caption = 'Form2' 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'MS Sans Serif' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | Visible = True 16 | OnCreate = FormCreate 17 | OnHide = FormHide 18 | PixelsPerInch = 96 19 | TextHeight = 13 20 | object TreeView1: TTreeView 21 | Left = 0 22 | Top = 25 23 | Width = 408 24 | Height = 253 25 | Align = alClient 26 | Indent = 19 27 | TabOrder = 0 28 | end 29 | object ToolBar1: TToolBar 30 | Left = 0 31 | Top = 0 32 | Width = 637 33 | Height = 25 34 | AutoSize = True 35 | ButtonHeight = 21 36 | ButtonWidth = 61 37 | Caption = 'ToolBar1' 38 | ShowCaptions = True 39 | TabOrder = 1 40 | object ToolButton1: TToolButton 41 | Left = 0 42 | Top = 2 43 | AutoSize = True 44 | Caption = 'Delete All' 45 | ImageIndex = 0 46 | OnClick = ToolButton1Click 47 | end 48 | object ToolButton2: TToolButton 49 | Left = 56 50 | Top = 2 51 | Caption = 'Mark All' 52 | ImageIndex = 1 53 | OnClick = ToolButton2Click 54 | end 55 | object ToolButton3: TToolButton 56 | Left = 117 57 | Top = 2 58 | AutoSize = True 59 | Caption = 'Collapse All' 60 | ImageIndex = 2 61 | OnClick = ToolButton3Click 62 | end 63 | object ToolButton4: TToolButton 64 | Left = 182 65 | Top = 2 66 | Caption = 'Expand All' 67 | ImageIndex = 3 68 | OnClick = ToolButton4Click 69 | end 70 | end 71 | object Panel1: TPanel 72 | Left = 408 73 | Top = 25 74 | Width = 229 75 | Height = 253 76 | Align = alRight 77 | TabOrder = 2 78 | object Label1: TLabel 79 | Left = 16 80 | Top = 24 81 | Width = 109 82 | Height = 13 83 | Caption = 'Shell Notifications Sent' 84 | end 85 | object Label2: TLabel 86 | Left = 16 87 | Top = 48 88 | Width = 116 89 | Height = 13 90 | Caption = 'Kernel Notifications Sent' 91 | end 92 | object Label3: TLabel 93 | Left = 16 94 | Top = 72 95 | Width = 137 96 | Height = 13 97 | Caption = 'Peak Change Notify Objects:' 98 | end 99 | object Label4: TLabel 100 | Left = 16 101 | Top = 120 102 | Width = 119 103 | Height = 13 104 | Caption = 'Peak Change Notify Lists' 105 | end 106 | object Label5: TLabel 107 | Left = 176 108 | Top = 24 109 | Width = 6 110 | Height = 13 111 | Caption = '0' 112 | end 113 | object Label6: TLabel 114 | Left = 176 115 | Top = 48 116 | Width = 6 117 | Height = 13 118 | Caption = '0' 119 | end 120 | object Label7: TLabel 121 | Left = 176 122 | Top = 72 123 | Width = 6 124 | Height = 13 125 | Caption = '0' 126 | end 127 | object Label8: TLabel 128 | Left = 176 129 | Top = 96 130 | Width = 6 131 | Height = 13 132 | Caption = '0' 133 | end 134 | object Label9: TLabel 135 | Left = 176 136 | Top = 120 137 | Width = 6 138 | Height = 13 139 | Caption = '0' 140 | end 141 | object Label10: TLabel 142 | Left = 176 143 | Top = 144 144 | Width = 6 145 | Height = 13 146 | Caption = '0' 147 | end 148 | object Label11: TLabel 149 | Left = 16 150 | Top = 96 151 | Width = 143 152 | Height = 13 153 | Caption = 'Current Change Notify Objects' 154 | end 155 | object Label12: TLabel 156 | Left = 16 157 | Top = 144 158 | Width = 128 159 | Height = 13 160 | Caption = 'Current Change Notify Lists' 161 | end 162 | object CheckBox1: TCheckBox 163 | Left = 120 164 | Top = 200 165 | Width = 97 166 | Height = 17 167 | Caption = 'Track Realtime' 168 | Checked = True 169 | State = cbChecked 170 | TabOrder = 0 171 | end 172 | object Button1: TButton 173 | Left = 8 174 | Top = 168 175 | Width = 97 176 | Height = 25 177 | Caption = 'Reset' 178 | TabOrder = 1 179 | OnClick = Button1Click 180 | end 181 | object Button2: TButton 182 | Left = 120 183 | Top = 168 184 | Width = 97 185 | Height = 25 186 | Caption = 'Manual Refresh' 187 | TabOrder = 2 188 | OnClick = Button2Click 189 | end 190 | end 191 | end 192 | -------------------------------------------------------------------------------- /Demos/Shell Notify/Unit2.pas: -------------------------------------------------------------------------------- 1 | unit Unit2; 2 | 3 | interface 4 | 5 | // You must define VIRTUALNOTIFYDEBUG in 6 | // Projects>Options>Conditional Defines to Compile 7 | 8 | uses 9 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 10 | ComCtrls, VirtualExplorerTree, MPShellUtilities, ToolWin, VirtualShellNotifier, 11 | StdCtrls, ExtCtrls; 12 | 13 | type 14 | TForm2 = class(TForm) 15 | TreeView1: TTreeView; 16 | ToolBar1: TToolBar; 17 | ToolButton1: TToolButton; 18 | ToolButton2: TToolButton; 19 | ToolButton3: TToolButton; 20 | ToolButton4: TToolButton; 21 | Panel1: TPanel; 22 | Label1: TLabel; 23 | Label2: TLabel; 24 | Label3: TLabel; 25 | Label4: TLabel; 26 | Label5: TLabel; 27 | Label6: TLabel; 28 | Label7: TLabel; 29 | Label8: TLabel; 30 | CheckBox1: TCheckBox; 31 | Label9: TLabel; 32 | Label10: TLabel; 33 | Label11: TLabel; 34 | Label12: TLabel; 35 | Button1: TButton; 36 | Button2: TButton; 37 | procedure ToolButton1Click(Sender: TObject); 38 | procedure ToolButton2Click(Sender: TObject); 39 | procedure ToolButton3Click(Sender: TObject); 40 | procedure ToolButton4Click(Sender: TObject); 41 | procedure FormCreate(Sender: TObject); 42 | procedure Button1Click(Sender: TObject); 43 | procedure Button2Click(Sender: TObject); 44 | procedure FormHide(Sender: TObject); 45 | private 46 | { Private declarations } 47 | public 48 | { Public declarations } 49 | procedure AddEvent(ShellEvent: TVirtualShellEvent); 50 | procedure DebugNotifyHook(Sender: TObject); 51 | procedure RefreshDebugGUI; 52 | 53 | end; 54 | 55 | var 56 | Form2: TForm2; 57 | 58 | implementation 59 | 60 | {$R *.DFM} 61 | 62 | { TForm2 } 63 | 64 | procedure TForm2.AddEvent(ShellEvent: TVirtualShellEvent); 65 | var 66 | NS1, NS2: TNamespace; 67 | Node, Node2, Node3: TTreeNode; 68 | begin 69 | with ShellEvent do 70 | begin 71 | if Assigned(PIDL1) then 72 | begin 73 | NS1 := TNamespace.Create(PIDL1, nil); 74 | NS1.FreePIDLOnDestroy := False; 75 | end else 76 | NS1 := nil; 77 | if Assigned(PIDL2) then 78 | begin 79 | NS2 := TNamespace.Create(PIDL2, nil); 80 | NS2.FreePIDLOnDestroy := False; 81 | end else 82 | NS2 := nil; 83 | Node := Treeview1.Items.AddChild(nil, VirtualShellNotifyEventToStr(ShellEvent.ShellNotifyEvent)); 84 | 85 | Node2 := Treeview1.Items.AddChild(Node, 'Item 1'); 86 | if Assigned(NS1) then 87 | begin 88 | Node3 := Treeview1.Items.AddChild(Node2, 'PIDL 1 = ' + IntToStr( Integer(PIDL1))); 89 | Treeview1.Items.AddChild(Node3, 'ItemID Count = ' + IntToStr( PIDLMgr.IDCount(PIDL1))); 90 | Treeview1.Items.AddChild(Node3, 'Path = ' + NS1.NameParseAddress); 91 | end else 92 | Treeview1.Items.AddChild(Node2, 'PIDL1 = nil'); 93 | 94 | Node3 := Treeview1.Items.AddChild(Node2, 'DWORD 1 = ' + IntToStr( DoubleWord1)); 95 | Treeview1.Items.AddChild(Node3, 'Drive ID = ' + FreeSpaceNotifyToDrive(DoubleWord1)); 96 | 97 | Node2 := Treeview1.Items.AddChild(Node, 'Item 2'); 98 | if Assigned(NS2) then 99 | begin 100 | Node3 := Treeview1.Items.AddChild(Node2, 'PIDL 2 = ' + IntToStr( Integer(PIDL2))); 101 | Treeview1.Items.AddChild(Node3, 'ItemID Count = ' + IntToStr( PIDLMgr.IDCount(PIDL2))); 102 | Treeview1.Items.AddChild(Node3, 'Path = ' + NS2.NameParseAddress); 103 | end else 104 | Treeview1.Items.AddChild(Node2, 'PIDL2 = nil'); 105 | Node3 := Treeview1.Items.AddChild(Node2, 'DWORD 2 = ' + IntToStr( DoubleWord2)); 106 | Treeview1.Items.AddChild(Node3, 'Drive ID = ' + FreeSpaceNotifyToDrive(DoubleWord2)); 107 | NS1.Free; 108 | NS2.Free; 109 | end; 110 | end; 111 | 112 | procedure TForm2.DebugNotifyHook; 113 | begin 114 | if CheckBox1.Checked then 115 | RefreshDebugGUI 116 | end; 117 | 118 | procedure TForm2.ToolButton1Click(Sender: TObject); 119 | begin 120 | Treeview1.Items.Clear 121 | end; 122 | 123 | procedure TForm2.ToolButton2Click(Sender: TObject); 124 | var 125 | i: integer; 126 | begin 127 | for i := 0 to Treeview1.Items.Count - 1 do 128 | begin 129 | if Treeview1.Items[i].Level = 0 then 130 | Treeview1.Items[i].Text := '----' + Treeview1.Items[i].Text 131 | end; 132 | end; 133 | 134 | procedure TForm2.ToolButton3Click(Sender: TObject); 135 | begin 136 | Treeview1.Items.BeginUpdate; 137 | try 138 | Treeview1.FullCollapse 139 | finally 140 | Treeview1.Items.EndUpdate 141 | end 142 | end; 143 | 144 | procedure TForm2.ToolButton4Click(Sender: TObject); 145 | begin 146 | Treeview1.Items.BeginUpdate; 147 | try 148 | Treeview1.FullExpand 149 | finally 150 | Treeview1.Items.EndUpdate 151 | end 152 | end; 153 | 154 | procedure TForm2.FormCreate(Sender: TObject); 155 | begin 156 | {$IFDEF VIRTUALNOTIFYDEBUG} 157 | NotifyDebug.OnChange := DebugNotifyHook 158 | {$ENDIF} 159 | end; 160 | 161 | procedure TForm2.Button1Click(Sender: TObject); 162 | begin 163 | {$IFDEF VIRTUALNOTIFYDEBUG} 164 | NotifyDebug.ShellEvents := 0; 165 | NotifyDebug.EventListObjects := 0; 166 | NotifyDebug.KernelEvents := 0; 167 | NotifyDebug.EventObjects := 0; 168 | NotifyDebug.PeakKernelEvents := 0; 169 | NotifyDebug.PeakShellEvents := 0; 170 | NotifyDebug.PeakEventObjects := 0; 171 | NotifyDebug.PeakEventListObjects := 0; 172 | RefreshDebugGUI 173 | {$ENDIF} 174 | end; 175 | 176 | procedure TForm2.RefreshDebugGUI; 177 | begin 178 | {$IFDEF VIRTUALNOTIFYDEBUG} 179 | Label5.Caption := IntToStr(NotifyDebug.PeakShellEvents); 180 | Label6.Caption := IntToStr(NotifyDebug.PeakKernelEvents); 181 | Label7.Caption := IntToStr(NotifyDebug.PeakEventObjects); 182 | Label8.Caption := IntToStr(NotifyDebug.EventObjects); 183 | Label9.Caption := IntToStr(NotifyDebug.PeakEventListObjects); 184 | Label10.Caption := IntToStr(NotifyDebug.EventListObjects); 185 | {$ENDIF} 186 | end; 187 | 188 | procedure TForm2.Button2Click(Sender: TObject); 189 | begin 190 | {$IFDEF VIRTUALNOTIFYDEBUG} 191 | RefreshDebugGUI 192 | {$ENDIF} 193 | end; 194 | 195 | procedure TForm2.FormHide(Sender: TObject); 196 | begin 197 | {$IFDEF VIRTUALNOTIFYDEBUG} 198 | NotifyDebug.OnChange := nil 199 | {$ENDIF} 200 | end; 201 | 202 | end. 203 | -------------------------------------------------------------------------------- /Demos/ShellColumn State Storing/ShellColumnStateStoring.dpr: -------------------------------------------------------------------------------- 1 | program ShellColumnStateStoring; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/ShellColumn State Storing/ShellColumnStateStoring.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/ShellColumn State Storing/ShellColumnStateStoring.res -------------------------------------------------------------------------------- /Demos/ShellColumn State Storing/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 | VirtualExplorerTree, VirtualTrees, ExtCtrls, StdCtrls; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | Panel2: TPanel; 12 | ExplorerTreeview1: TVirtualExplorerTreeview; 13 | Splitter1: TSplitter; 14 | ExplorerListview1: TVirtualExplorerListview; 15 | Panel1: TPanel; 16 | Panel3: TPanel; 17 | Panel4: TPanel; 18 | Button1: TButton; 19 | Button2: TButton; 20 | Label4: TLabel; 21 | Memo1: TMemo; 22 | procedure Button1Click(Sender: TObject); 23 | procedure Button2Click(Sender: TObject); 24 | private 25 | { Private declarations } 26 | public 27 | { Public declarations } 28 | end; 29 | 30 | var 31 | Form1: TForm1; 32 | 33 | implementation 34 | 35 | {$R *.DFM} 36 | 37 | procedure TForm1.Button1Click(Sender: TObject); 38 | begin 39 | ExplorerListview1.Storage.SaveToFile('Storage.dat'); 40 | end; 41 | 42 | procedure TForm1.Button2Click(Sender: TObject); 43 | begin 44 | ExplorerListview1.Storage.LoadFromFile('Storage.dat'); 45 | ExplorerListview1.RefreshTree 46 | end; 47 | 48 | end. 49 | -------------------------------------------------------------------------------- /Demos/ShellNew (New File) Menu/ShellNew_NewFileMenu.dpr: -------------------------------------------------------------------------------- 1 | program ShellNew_NewFileMenu; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/ShellNew (New File) Menu/ShellNew_NewFileMenu.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/ShellNew (New File) Menu/ShellNew_NewFileMenu.res -------------------------------------------------------------------------------- /Demos/ShellNew (New File) Menu/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 274 3 | Top = 248 4 | Width = 559 5 | Height = 375 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | ShowHint = True 15 | OnShow = FormShow 16 | DesignSize = ( 17 | 551 18 | 341) 19 | PixelsPerInch = 96 20 | TextHeight = 13 21 | object Label2: TLabel 22 | Left = 16 23 | Top = 8 24 | Width = 119 25 | Height = 26 26 | Caption = 'Click button or right click on the Listview' 27 | WordWrap = True 28 | end 29 | object Button1: TButton 30 | Left = 18 31 | Top = 36 32 | Width = 121 33 | Height = 25 34 | Caption = 'ShellNew Menu' 35 | TabOrder = 0 36 | OnClick = Button1Click 37 | end 38 | object RadioGroupFileName: TRadioGroup 39 | Left = 10 40 | Top = 72 41 | Width = 528 42 | Height = 57 43 | Anchors = [akLeft, akTop, akRight] 44 | Caption = 'New Filename' 45 | ItemIndex = 0 46 | Items.Strings = ( 47 | 'Let VSTools create the filename' 48 | 'Use my filename (no extenstion necessary)') 49 | TabOrder = 1 50 | end 51 | object Edit1: TEdit 52 | Left = 266 53 | Top = 102 54 | Width = 264 55 | Height = 21 56 | Anchors = [akLeft, akTop, akRight] 57 | TabOrder = 2 58 | Text = 'My Custom Filename' 59 | end 60 | object ExplorerListview1: TVirtualExplorerListview 61 | Left = 10 62 | Top = 136 63 | Width = 527 64 | Height = 201 65 | Active = False 66 | Anchors = [akLeft, akTop, akRight, akBottom] 67 | ColumnDetails = cdShellColumns 68 | DefaultNodeHeight = 17 69 | DragHeight = 250 70 | DragWidth = 150 71 | FileObjects = [foFolders, foNonFolders] 72 | FileSizeFormat = fsfExplorer 73 | FileSort = fsFileType 74 | Header.AutoSizeIndex = -1 75 | Header.Font.Charset = DEFAULT_CHARSET 76 | Header.Font.Color = clWindowText 77 | Header.Font.Height = -11 78 | Header.Font.Name = 'MS Sans Serif' 79 | Header.Font.Style = [] 80 | Header.Options = [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible] 81 | HintAnimation = hatNone 82 | HintMode = hmHint 83 | Indent = 0 84 | ParentColor = False 85 | PopupMenu = VirtualShellNewMenu1 86 | RootFolder = rfDesktop 87 | TabOrder = 3 88 | TabStop = True 89 | TreeOptions.AutoOptions = [toAutoScroll] 90 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toReportMode, toToggleOnDblClick] 91 | TreeOptions.PaintOptions = [toShowButtons, toShowTreeLines, toUseBlendedImages] 92 | TreeOptions.SelectionOptions = [toMultiSelect, toRightClickSelect, toSiblingSelectConstraint] 93 | TreeOptions.VETFolderOptions = [toHideRootFolder] 94 | TreeOptions.VETShellOptions = [toContextMenus] 95 | TreeOptions.VETSyncOptions = [] 96 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toChangeNotifierThread] 97 | TreeOptions.VETImageOptions = [toImages, toThreadedImages] 98 | ColumnMenuItemCount = 8 99 | end 100 | object GroupBox1: TGroupBox 101 | Left = 152 102 | Top = 8 103 | Width = 385 104 | Height = 57 105 | Caption = 'Options' 106 | TabOrder = 4 107 | object CheckBox1: TCheckBox 108 | Left = 136 109 | Top = 16 110 | Width = 121 111 | Height = 17 112 | Hint = 113 | 'Turning this option on mimics Explorer New menu. Explorer short' + 114 | 'ens the list for example HTML files should have a *.htm and a *h' + 115 | 'tml item. Not combining items will leave both in menu.' 116 | Caption = 'Combine Like Items' 117 | TabOrder = 0 118 | OnClick = CheckBox1Click 119 | end 120 | object CheckBox2: TCheckBox 121 | Left = 136 122 | Top = 32 123 | Width = 105 124 | Height = 17 125 | Caption = 'Use Shell Images' 126 | TabOrder = 1 127 | OnClick = CheckBox2Click 128 | end 129 | object CheckBox3: TCheckBox 130 | Left = 264 131 | Top = 16 132 | Width = 113 133 | Height = 17 134 | Caption = 'Warn on Overwrite' 135 | TabOrder = 2 136 | OnClick = CheckBox3Click 137 | end 138 | object CheckBox4: TCheckBox 139 | Left = 8 140 | Top = 16 141 | Width = 113 142 | Height = 17 143 | Caption = 'New Folder Item' 144 | TabOrder = 3 145 | OnClick = CheckBox4Click 146 | end 147 | object CheckBox5: TCheckBox 148 | Left = 8 149 | Top = 32 150 | Width = 113 151 | Height = 17 152 | Caption = 'New Shortcut Item' 153 | TabOrder = 4 154 | OnClick = CheckBox5Click 155 | end 156 | end 157 | object VirtualShellNewMenu1: TVirtualShellNewMenu 158 | OnAddMenuItem = VirtualShellNewMenu1AddMenuItem 159 | OnCreateNewFile = VirtualShellNewMenu1CreateNewFile 160 | WarnOnOverwrite = False 161 | Left = 88 162 | Top = 240 163 | end 164 | end 165 | -------------------------------------------------------------------------------- /Demos/ShellNew (New File) Menu/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 | StdCtrls, VirtualExplorerTree, VirtualTrees, ExtCtrls, Menus, 8 | MPShellUtilities, VirtualShellNewMenu; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | Button1: TButton; 13 | RadioGroupFileName: TRadioGroup; 14 | Edit1: TEdit; 15 | ExplorerListview1: TVirtualExplorerListview; 16 | GroupBox1: TGroupBox; 17 | CheckBox1: TCheckBox; 18 | CheckBox2: TCheckBox; 19 | CheckBox3: TCheckBox; 20 | CheckBox4: TCheckBox; 21 | CheckBox5: TCheckBox; 22 | Label2: TLabel; 23 | VirtualShellNewMenu1: TVirtualShellNewMenu; 24 | procedure Button1Click(Sender: TObject); 25 | procedure VirtualShellNewMenu1AddMenuItem(Sender: TPopupMenu; 26 | const NewMenuItem: TVirtualShellNewItem; var Allow: Boolean); 27 | procedure VirtualShellNewMenu1CreateNewFile(Sender: TMenu; 28 | const NewMenuItem: TVirtualShellNewItem; var Path, FileName: String; 29 | var Allow: Boolean); 30 | procedure CheckBox1Click(Sender: TObject); 31 | procedure CheckBox2Click(Sender: TObject); 32 | procedure CheckBox3Click(Sender: TObject); 33 | procedure CheckBox4Click(Sender: TObject); 34 | procedure CheckBox5Click(Sender: TObject); 35 | procedure FormShow(Sender: TObject); 36 | private 37 | { Private declarations } 38 | public 39 | { Public declarations } 40 | procedure Loaded; override; 41 | end; 42 | 43 | var 44 | Form1: TForm1; 45 | 46 | implementation 47 | 48 | {$R *.DFM} 49 | 50 | procedure TForm1.Button1Click(Sender: TObject); 51 | var 52 | Pt: TPoint; 53 | begin 54 | Pt.x := Button1.Left; 55 | Pt.y := Button1.Top + Button1.Height; 56 | Pt := ClientToScreen(Pt); 57 | VirtualShellNewMenu1.Popup(Pt.x, Pt.y); 58 | end; 59 | 60 | procedure TForm1.VirtualShellNewMenu1AddMenuItem(Sender: TPopupMenu; 61 | const NewMenuItem: TVirtualShellNewItem; var Allow: Boolean); 62 | begin 63 | { Here Menu Items can be filtered dynamiclly } 64 | end; 65 | 66 | procedure TForm1.VirtualShellNewMenu1CreateNewFile(Sender: TMenu; 67 | const NewMenuItem: TVirtualShellNewItem; var Path, FileName: String; 68 | var Allow: Boolean); 69 | begin 70 | { Here we MUST return the path the file is to be created in } 71 | Path := ExplorerListview1.RootFolderNamespace.NameForParsing; 72 | if RadioGroupFileName.ItemIndex = 1 then 73 | FileName := Edit1.Text; 74 | end; 75 | 76 | procedure TForm1.CheckBox1Click(Sender: TObject); 77 | begin 78 | VirtualShellNewMenu1.CombineLikeItems := CheckBox1.Checked; 79 | end; 80 | 81 | procedure TForm1.CheckBox2Click(Sender: TObject); 82 | begin 83 | VirtualShellNewMenu1.UseShellImages := CheckBox2.Checked; 84 | end; 85 | 86 | procedure TForm1.CheckBox3Click(Sender: TObject); 87 | begin 88 | VirtualShellNewMenu1.WarnOnOverwrite := CheckBox3.Checked; 89 | end; 90 | 91 | procedure TForm1.Loaded; 92 | begin 93 | inherited; 94 | CheckBox3.Checked := VirtualShellNewMenu1.WarnOnOverwrite; 95 | CheckBox2.Checked := VirtualShellNewMenu1.UseShellImages; 96 | CheckBox1.Checked := VirtualShellNewMenu1.CombineLikeItems; 97 | CheckBox4.Checked := VirtualShellNewMenu1.NewFolderItem; 98 | CheckBox5.Checked := VirtualShellNewMenu1.NewShortcutItem; 99 | end; 100 | 101 | procedure TForm1.FormShow(Sender: TObject); 102 | begin 103 | Application.HintPause := 10000; 104 | ExplorerListview1.Active := True; 105 | end; 106 | 107 | procedure TForm1.CheckBox4Click(Sender: TObject); 108 | begin 109 | VirtualShellNewMenu1.NewFolderItem := CheckBox4.Checked; 110 | end; 111 | 112 | procedure TForm1.CheckBox5Click(Sender: TObject); 113 | begin 114 | VirtualShellNewMenu1.NewShortcutItem := CheckBox5.Checked; 115 | end; 116 | 117 | end. 118 | -------------------------------------------------------------------------------- /Demos/ShellToolbars/ShellToolbars.dpr: -------------------------------------------------------------------------------- 1 | program ShellToolbars; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.RES} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/ShellToolbars/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 | ShlObj, Buttons, ToolWin, ComCtrls, VirtualShellToolBar, 8 | ExtCtrls, VirtualTrees, VirtualExplorerTree, Menus, StdCtrls, MPShellUtilities; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | Panel1: TPanel; 13 | CheckBox1: TCheckBox; 14 | CheckBox2: TCheckBox; 15 | CheckBox4: TCheckBox; 16 | CheckBox5: TCheckBox; 17 | Label3: TLabel; 18 | Label4: TLabel; 19 | Edit3: TEdit; 20 | Edit4: TEdit; 21 | Button4: TButton; 22 | Button5: TButton; 23 | RadioGroup1: TRadioGroup; 24 | CheckBox3: TCheckBox; 25 | CheckBox6: TCheckBox; 26 | CheckBox7: TCheckBox; 27 | DriveToolbar1: TVirtualDriveToolbar; 28 | ShellToolbar1: TVirtualShellToolbar; 29 | ExplorerListview1: TVirtualExplorerListview; 30 | ExplorerTreeview1: TVirtualExplorerTreeview; 31 | Splitter1: TSplitter; 32 | SpecialFolderToolbar1: TVirtualSpecialFolderToolbar; 33 | Label5: TLabel; 34 | procedure FormCreate(Sender: TObject); 35 | procedure FormDestroy(Sender: TObject); 36 | procedure CheckBox1Click(Sender: TObject); 37 | procedure CheckBox2Click(Sender: TObject); 38 | procedure CheckBox4Click(Sender: TObject); 39 | procedure CheckBox5Click(Sender: TObject); 40 | procedure Button4Click(Sender: TObject); 41 | procedure Button5Click(Sender: TObject); 42 | procedure RadioGroup1Click(Sender: TObject); 43 | procedure CheckBox3Click(Sender: TObject); 44 | procedure CheckBox6Click(Sender: TObject); 45 | procedure CheckBox7Click(Sender: TObject); 46 | private 47 | { Private declarations } 48 | public 49 | { Public declarations } 50 | procedure SetToolbarsOptions(Include: boolean; Op: TVirtualToolbarOptions; CaptionOp: TCaptionOptions); 51 | end; 52 | 53 | var 54 | Form1: TForm1; 55 | 56 | implementation 57 | 58 | {$R *.DFM} 59 | 60 | const 61 | ShellToolbarDataFile = 'Test.dat'; 62 | ShellToolbarDataFile1 = 'Test1.dat'; 63 | ShellToolbarDataFile2 = 'Test2.dat'; 64 | 65 | procedure TForm1.FormCreate(Sender: TObject); 66 | begin 67 | Edit3.Text := IntToStr(ShellToolbar1.ButtonMargin); 68 | Edit4.Text := IntToStr(ShellToolbar1.ButtonSpacing); 69 | 70 | 71 | { if FileExists(ShellToolbarDataFile) then 72 | ShellToolbar1.ReadFromFile(ShellToolbarDataFile); 73 | 74 | if FileExists(ShellToolbarDataFile1) then 75 | ShellToolbar2.ReadFromFile(ShellToolbarDataFile1); 76 | 77 | if FileExists(ShellToolbarDataFile2) then 78 | ShellToolbar3.ReadFromFile(ShellToolbarDataFile2); 79 | 80 | if ShellToolbar1.AutoSize then 81 | begin 82 | ShellToolbar1.AutoSize := False; 83 | ShellToolbar1.AutoSize := True 84 | end } 85 | end; 86 | 87 | procedure TForm1.FormDestroy(Sender: TObject); 88 | begin 89 | { ShellToolbar1.WriteToFile(ShellToolbarDataFile); 90 | ShellToolbar2.WriteToFile(ShellToolbarDataFile1); 91 | ShellToolbar3.WriteToFile(ShellToolbarDataFile2); } 92 | end; 93 | 94 | procedure TForm1.CheckBox1Click(Sender: TObject); 95 | begin 96 | ShellToolbar1.AutoSize := Checkbox1.Checked; 97 | DriveToolbar1.AutoSize := Checkbox1.Checked; 98 | SpecialFolderToolbar1.AutoSize := Checkbox1.Checked; 99 | end; 100 | 101 | procedure TForm1.CheckBox7Click(Sender: TObject); 102 | begin 103 | SetToolbarsOptions(CheckBox7.Checked, [toEqualWidth], []); 104 | end; 105 | 106 | procedure TForm1.CheckBox2Click(Sender: TObject); 107 | begin 108 | SetToolbarsOptions(CheckBox2.Checked, [toFlat], []); 109 | end; 110 | 111 | procedure TForm1.CheckBox4Click(Sender: TObject); 112 | begin 113 | SetToolbarsOptions(CheckBox4.Checked, [toTransparent], []); 114 | end; 115 | 116 | procedure TForm1.CheckBox3Click(Sender: TObject); 117 | begin 118 | SetToolbarsOptions(CheckBox3.Checked, [toTile], []); 119 | end; 120 | 121 | procedure TForm1.CheckBox5Click(Sender: TObject); 122 | begin 123 | SetToolbarsOptions(CheckBox5.Checked, [], [coFolderName]); 124 | end; 125 | 126 | procedure TForm1.CheckBox6Click(Sender: TObject); 127 | begin 128 | SetToolbarsOptions(CheckBox6.Checked, [], [coNoExtension]); 129 | end; 130 | 131 | procedure TForm1.Button4Click(Sender: TObject); 132 | begin 133 | ShellToolbar1.ButtonMargin := StrToInt(Edit3.Text); 134 | SpecialFolderToolbar1.ButtonMargin := StrToInt(Edit3.Text); 135 | end; 136 | 137 | procedure TForm1.Button5Click(Sender: TObject); 138 | begin 139 | ShellToolbar1.ButtonSpacing := StrToInt(Edit4.Text); 140 | SpecialFolderToolbar1.ButtonSpacing := StrToInt(Edit4.Text); 141 | end; 142 | 143 | procedure TForm1.RadioGroup1Click(Sender: TObject); 144 | begin 145 | case RadioGroup1.ItemIndex of 146 | 0: ShellToolbar1.ButtonLayout := Buttons.blGlyphTop; 147 | 1: ShellToolbar1.ButtonLayout := Buttons.blGlyphBottom; 148 | 2: ShellToolbar1.ButtonLayout := Buttons.blGlyphLeft; 149 | 3: ShellToolbar1.ButtonLayout := Buttons.blGlyphRight; 150 | end; 151 | 152 | DriveToolbar1.ButtonLayout := ShellToolbar1.ButtonLayout; 153 | SpecialFolderToolbar1.ButtonLayout := ShellToolbar1.ButtonLayout; 154 | end; 155 | 156 | procedure TForm1.SetToolbarsOptions(Include: boolean; Op: TVirtualToolbarOptions; CaptionOp: TCaptionOptions); 157 | begin 158 | if Include then begin 159 | ShellToolbar1.Options := ShellToolbar1.Options + Op; 160 | DriveToolbar1.Options := DriveToolbar1.Options + Op; 161 | SpecialFolderToolbar1.Options := SpecialFolderToolbar1.Options + Op; 162 | 163 | ShellToolbar1.ButtonCaptionOptions := ShellToolbar1.ButtonCaptionOptions + CaptionOp; 164 | SpecialFolderToolbar1.ButtonCaptionOptions := SpecialFolderToolbar1.ButtonCaptionOptions + CaptionOp; 165 | end 166 | else begin 167 | ShellToolbar1.Options := ShellToolbar1.Options - Op; 168 | DriveToolbar1.Options := DriveToolbar1.Options - Op; 169 | SpecialFolderToolbar1.Options := SpecialFolderToolbar1.Options - Op; 170 | 171 | ShellToolbar1.ButtonCaptionOptions := ShellToolbar1.ButtonCaptionOptions - CaptionOp; 172 | SpecialFolderToolbar1.ButtonCaptionOptions := SpecialFolderToolbar1.ButtonCaptionOptions - CaptionOp; 173 | end; 174 | end; 175 | 176 | end. 177 | -------------------------------------------------------------------------------- /Demos/User Data/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 248 3 | Top = 141 4 | Width = 669 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | DesignSize = ( 15 | 661 16 | 446) 17 | PixelsPerInch = 96 18 | TextHeight = 13 19 | object Label1: TLabel 20 | Left = 352 21 | Top = 56 22 | Width = 158 23 | Height = 13 24 | Caption = 'String To Assign To User Storage' 25 | end 26 | object Label2: TLabel 27 | Left = 352 28 | Top = 168 29 | Width = 289 30 | Height = 13 31 | Anchors = [akLeft, akTop, akRight] 32 | AutoSize = False 33 | end 34 | object VET: TVirtualExplorerTree 35 | Left = 0 36 | Top = 0 37 | Width = 329 38 | Height = 446 39 | Active = True 40 | Align = alLeft 41 | ColumnDetails = cdUser 42 | ColumnMenuItemCount = 8 43 | DefaultNodeHeight = 17 44 | DragHeight = 250 45 | DragWidth = 150 46 | FileObjects = [foFolders, foNonFolders] 47 | FileSizeFormat = fsfExplorer 48 | FileSort = fsFileType 49 | Header.AutoSizeIndex = 0 50 | Header.Font.Charset = DEFAULT_CHARSET 51 | Header.Font.Color = clWindowText 52 | Header.Font.Height = -11 53 | Header.Font.Name = 'MS Shell Dlg 2' 54 | Header.Font.Style = [] 55 | Header.MainColumn = -1 56 | Header.Options = [hoColumnResize, hoDrag] 57 | HintMode = hmHint 58 | ParentColor = False 59 | RootFolder = rfDesktop 60 | TabOrder = 0 61 | TabStop = True 62 | TreeOptions.PaintOptions = [toShowButtons, toShowRoot, toShowTreeLines, toThemeAware, toUseBlendedImages] 63 | TreeOptions.VETShellOptions = [toRightAlignSizeColumn, toContextMenus] 64 | TreeOptions.VETSyncOptions = [toCollapseTargetFirst, toExpandTarget, toSelectTarget] 65 | TreeOptions.VETMiscOptions = [toBrowseExecuteFolder, toBrowseExecuteFolderShortcut, toExecuteOnDblClk] 66 | TreeOptions.VETImageOptions = [toImages] 67 | Columns = <> 68 | end 69 | object Button1: TButton 70 | Left = 344 71 | Top = 24 72 | Width = 217 73 | Height = 25 74 | Caption = 'Store String to Selected Node' 75 | TabOrder = 1 76 | OnClick = Button1Click 77 | end 78 | object Edit1: TEdit 79 | Left = 376 80 | Top = 72 81 | Width = 201 82 | Height = 21 83 | TabOrder = 2 84 | Text = 'Edit1' 85 | end 86 | object Button2: TButton 87 | Left = 344 88 | Top = 128 89 | Width = 217 90 | Height = 25 91 | Caption = 'Read User Data from Selected Node' 92 | TabOrder = 3 93 | OnClick = Button2Click 94 | end 95 | object Button3: TButton 96 | Left = 352 97 | Top = 224 98 | Width = 209 99 | Height = 25 100 | Caption = 'Delete User Data from Selected Node' 101 | TabOrder = 4 102 | OnClick = Button3Click 103 | end 104 | end 105 | -------------------------------------------------------------------------------- /Demos/User Data/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, VirtualTrees, VirtualExplorerTree, MPShellUtilities; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | VET: TVirtualExplorerTree; 12 | Button1: TButton; 13 | Edit1: TEdit; 14 | Label1: TLabel; 15 | Button2: TButton; 16 | Label2: TLabel; 17 | Button3: TButton; 18 | procedure Button1Click(Sender: TObject); 19 | procedure Button2Click(Sender: TObject); 20 | procedure Button3Click(Sender: TObject); 21 | private 22 | { Private declarations } 23 | public 24 | { Public declarations } 25 | end; 26 | 27 | 28 | // User Defined Per node Storage override this and use the Storage class in VET or the Global 29 | TMyUserDataStorage = class(TUserDataStorage) 30 | private 31 | FUserString: string; 32 | public 33 | //You should override these 3 methods in your application: 34 | procedure LoadFromStream(S: TStream; Version: integer = VETStreamStorageVer; ReadVerFromStream: Boolean = False); override; 35 | procedure SaveToStream(S: TStream; Version: integer = VETStreamStorageVer; WriteVerToStream: Boolean = False); override; 36 | procedure Assign(Source: TPersistent); override; 37 | 38 | property UserString: string read FUserString write FUserString; 39 | end; 40 | 41 | var 42 | Form1: TForm1; 43 | 44 | implementation 45 | 46 | {$R *.dfm} 47 | 48 | { TMyUserDataStorage } 49 | 50 | procedure TMyUserDataStorage.Assign(Source: TPersistent); 51 | begin 52 | if Source is TMyUserDataStorage then 53 | UserString := TMyUserDataStorage(Source).UserString; 54 | inherited; 55 | end; 56 | 57 | procedure TMyUserDataStorage.LoadFromStream(S: TStream; Version: integer; 58 | ReadVerFromStream: Boolean); 59 | var 60 | Count: Integer; 61 | begin 62 | inherited; 63 | S.read(Count, SizeOf(Count)); 64 | SetLength(FUserString, Count); 65 | S.read(PChar(FUserString)^, Count) 66 | end; 67 | 68 | procedure TMyUserDataStorage.SaveToStream(S: TStream; Version: integer; 69 | WriteVerToStream: Boolean); 70 | var 71 | Count: Integer; 72 | begin 73 | inherited; 74 | Count := Length(FUserString); 75 | S.Write(Count, SizeOf(Count)); 76 | S.Write(PChar(FUserString)^, Count) 77 | end; 78 | 79 | procedure TForm1.Button1Click(Sender: TObject); 80 | var 81 | NS: TNamespace; 82 | SNode: TNodeSTorage; 83 | begin 84 | if VET.ValidateNamespace(VET.GetFirstSelected, NS) then 85 | begin 86 | SNode := VET.Storage.Store(NS.AbsolutePIDL, [stUser]); 87 | if Assigned(SNode) then 88 | begin 89 | SNode.Storage.UserData := TMyUserDataStorage.Create; 90 | TMyUserDataStorage(SNode.Storage.UserData).UserString := Edit1.Text 91 | end 92 | end 93 | end; 94 | 95 | procedure TForm1.Button2Click(Sender: TObject); 96 | var 97 | NS: TNamespace; 98 | SNode: TNodeSTorage; 99 | begin 100 | if VET.ValidateNamespace(VET.GetFirstSelected, NS) then 101 | if VET.Storage.Find(NS.AbsolutePIDL, [stUser], SNode) then 102 | Label2.Caption := TMyUserDataStorage( SNode.Storage.UserData).UserString 103 | else 104 | ShowMessage('No User Data has been assiged to this node') 105 | end; 106 | 107 | procedure TForm1.Button3Click(Sender: TObject); 108 | var 109 | NS: TNamespace; 110 | SNode: TNodeSTorage; 111 | begin 112 | if VET.ValidateNamespace(VET.GetFirstSelected, NS) then 113 | if VET.Storage.Find(NS.AbsolutePIDL, [stUser], SNode) then 114 | begin 115 | SNode.Storage.UserData.Free; 116 | SNode.Storage.UserData := nil; 117 | VET.Storage.Delete(NS.AbsolutePIDL, [stUser]); 118 | end else 119 | ShowMessage('No User Data has been assiged to this node') 120 | end; 121 | 122 | end. 123 | -------------------------------------------------------------------------------- /Demos/User Data/UserDataProject.dpr: -------------------------------------------------------------------------------- 1 | 2 | program UserDataProject; 3 | 4 | uses 5 | Forms, 6 | Unit1 in 'Unit1.pas' {Form1}; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /Demos/User Data/UserDataProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/User Data/UserDataProject.res -------------------------------------------------------------------------------- /Demos/Vertical Icons Custom Draw/ProjectVerticalIcons.dpr: -------------------------------------------------------------------------------- 1 | program ProjectVerticalIcons; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Vertical Icons Custom Draw/ProjectVerticalIcons.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Vertical Icons Custom Draw/ProjectVerticalIcons.res -------------------------------------------------------------------------------- /Demos/Vertical Icons Custom Draw/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 522 3 | Top = 325 4 | Width = 829 5 | Height = 511 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 17 | Left = 0 18 | Top = 0 19 | Width = 813 20 | Height = 475 21 | Active = True 22 | Align = alClient 23 | CompressedFile.Color = clRed 24 | CompressedFile.Font.Charset = DEFAULT_CHARSET 25 | CompressedFile.Font.Color = clWindowText 26 | CompressedFile.Font.Height = -11 27 | CompressedFile.Font.Name = 'MS Sans Serif' 28 | CompressedFile.Font.Style = [] 29 | DefaultSortColumn = 0 30 | EditManager.Font.Charset = DEFAULT_CHARSET 31 | EditManager.Font.Color = clWindowText 32 | EditManager.Font.Height = -11 33 | EditManager.Font.Name = 'MS Sans Serif' 34 | EditManager.Font.Style = [] 35 | EncryptedFile.Color = 32832 36 | EncryptedFile.Font.Charset = DEFAULT_CHARSET 37 | EncryptedFile.Font.Color = clWindowText 38 | EncryptedFile.Font.Height = -11 39 | EncryptedFile.Font.Name = 'MS Sans Serif' 40 | EncryptedFile.Font.Style = [] 41 | FileSizeFormat = vfsfDefault 42 | Grouped = False 43 | GroupingColumn = 0 44 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 45 | PaintInfoGroup.MarginTop.Visible = False 46 | Sort.Algorithm = esaQuickSort 47 | Sort.AutoSort = True 48 | Selection.AlphaBlendSelRect = True 49 | Selection.EnableDragSelect = True 50 | Selection.MultiSelect = True 51 | TabOrder = 0 52 | ThumbsManager.StorageFilename = 'Thumbnails.album' 53 | OnCustomGrid = VirtualExplorerEasyListview1CustomGrid 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /Demos/Vertical Icons Custom Draw/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, MPCommonObjects, EasyListview, VirtualExplorerEasyListview; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 12 | procedure VirtualExplorerEasyListview1CustomGrid( 13 | Sender: TCustomEasyListview; Group: TEasyGroup; 14 | ViewStyle: TEasyListStyle; var Grid: TEasyGridGroupClass); 15 | private 16 | { Private declarations } 17 | public 18 | { Public declarations } 19 | end; 20 | 21 | // Make a grid that is layed out like the List View but has the cell sizing of 22 | // the Icon View 23 | TVerticalIconGridGroup = class(TEasyGridListGroup) 24 | protected 25 | function GetCellSize: TEasyCellSize; override; 26 | end; 27 | 28 | var 29 | Form1: TForm1; 30 | 31 | implementation 32 | 33 | {$R *.dfm} 34 | 35 | type 36 | TCustomVirtualExplorerEasyListviewHack = class(TCustomVirtualExplorerEasyListview); 37 | 38 | { TVerticalIconGridGroup } 39 | function TVerticalIconGridGroup.GetCellSize: TEasyCellSize; 40 | begin 41 | Result := TCustomVirtualExplorerEasyListviewHack(OwnerListview).CellSizes.Icon; 42 | end; 43 | 44 | procedure TForm1.VirtualExplorerEasyListview1CustomGrid( 45 | Sender: TCustomEasyListview; Group: TEasyGroup; 46 | ViewStyle: TEasyListStyle; var Grid: TEasyGridGroupClass); 47 | begin 48 | // Map the Icon style to the Vertical Icon List Style 49 | if ViewStyle = elsIcon then 50 | Grid := TVerticalIconGridGroup; 51 | end; 52 | 53 | end. 54 | -------------------------------------------------------------------------------- /Demos/Virtual Explorer/About.dfm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Virtual Explorer/About.dfm -------------------------------------------------------------------------------- /Demos/Virtual Explorer/About.pas: -------------------------------------------------------------------------------- 1 | unit About; 2 | 3 | interface 4 | 5 | uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, 6 | Buttons, ExtCtrls, ShellAPI, Messages; 7 | 8 | type 9 | TAboutBox = class(TForm) 10 | Panel1: TPanel; 11 | ProgramIcon: TImage; 12 | ProductName: TLabel; 13 | Version: TLabel; 14 | OKButton: TButton; 15 | Label2: TLabel; 16 | Timer1: TTimer; 17 | Label3: TLabel; 18 | Label4: TLabel; 19 | Label5: TLabel; 20 | Label6: TLabel; 21 | Label1: TLabel; 22 | Label7: TLabel; 23 | procedure Timer1Timer(Sender: TObject); 24 | procedure FormShow(Sender: TObject); 25 | procedure FormHide(Sender: TObject); 26 | procedure Label3MouseDown(Sender: TObject; Button: TMouseButton; 27 | Shift: TShiftState; X, Y: Integer); 28 | procedure Label4MouseDown(Sender: TObject; Button: TMouseButton; 29 | Shift: TShiftState; X, Y: Integer); 30 | procedure Label5MouseDown(Sender: TObject; Button: TMouseButton; 31 | Shift: TShiftState; X, Y: Integer); 32 | procedure Label1MouseDown(Sender: TObject; Button: TMouseButton; 33 | Shift: TShiftState; X, Y: Integer); 34 | procedure Label7MouseDown(Sender: TObject; Button: TMouseButton; 35 | Shift: TShiftState; X, Y: Integer); 36 | private 37 | { Private declarations } 38 | 39 | public 40 | { Public declarations } 41 | 42 | end; 43 | 44 | var 45 | AboutBox: TAboutBox; 46 | 47 | implementation 48 | 49 | {$R *.DFM} 50 | 51 | procedure TAboutBox.Timer1Timer(Sender: TObject); 52 | 53 | function CheckURL(ALabel: TLabel): Boolean; 54 | begin 55 | if PtInRect(ALabel.ClientRect, ALabel.ScreenToClient(Mouse.CursorPos)) then 56 | begin 57 | Screen.Cursor := crHandPoint; 58 | ALabel.Font.Color := clBlue; 59 | ALabel.Font.Style := ALabel.Font.Style + [fsBold]; 60 | Result := True; 61 | end else 62 | begin 63 | ALabel.Font.Color := clBlack; 64 | ALabel.Font.Style := ALabel.Font.Style - [fsBold]; 65 | Result := False; 66 | end 67 | end; 68 | 69 | begin 70 | {$B+} 71 | if not (CheckURL(Label3) or CheckURL(Label4) or CheckURL(Label5) or CheckURL(Label1) or CheckURL(Label7)) then 72 | begin 73 | Screen.Cursor := crDefault; 74 | end; 75 | {$B-} 76 | end; 77 | 78 | procedure TAboutBox.FormShow(Sender: TObject); 79 | begin 80 | Timer1.Enabled := True; 81 | ProgramIcon.Picture.LoadFromFile('VST Logo 1.bmp'); 82 | end; 83 | 84 | procedure TAboutBox.FormHide(Sender: TObject); 85 | begin 86 | Timer1.Enabled := False; 87 | ProgramIcon.Picture.Bitmap.ReleaseHandle; 88 | end; 89 | 90 | procedure TAboutBox.Label3MouseDown(Sender: TObject; Button: TMouseButton; 91 | Shift: TShiftState; X, Y: Integer); 92 | begin 93 | ShellExecute(Handle, 'open', 'http://Borland.com', '', '', SW_SHOWNORMAL); 94 | end; 95 | 96 | procedure TAboutBox.Label4MouseDown(Sender: TObject; Button: TMouseButton; 97 | Shift: TShiftState; X, Y: Integer); 98 | begin 99 | ShellExecute(Handle, 'open', 'http://www.lischke-online.de/VirtualTreeview.html', '', '', SW_SHOWNORMAL); 100 | end; 101 | 102 | procedure TAboutBox.Label5MouseDown(Sender: TObject; Button: TMouseButton; 103 | Shift: TShiftState; X, Y: Integer); 104 | begin 105 | ShellExecute(Handle, 'open', 'http://groups.yahoo.com/group/VirtualExplorerTree/', '', '', SW_SHOWNORMAL); 106 | end; 107 | 108 | procedure TAboutBox.Label1MouseDown(Sender: TObject; Button: TMouseButton; 109 | Shift: TShiftState; X, Y: Integer); 110 | begin 111 | ShellExecute(Handle, 'open', 'http://www.delphi-gems.com/ThemeManager.html', '', '', SW_SHOWNORMAL); 112 | end; 113 | 114 | procedure TAboutBox.Label7MouseDown(Sender: TObject; Button: TMouseButton; 115 | Shift: TShiftState; X, Y: Integer); 116 | begin 117 | ShellExecute(Handle, 'open', 'mailto: jimdk@mindspring.com', '', '', SW_SHOWNORMAL); 118 | end; 119 | 120 | end. 121 | 122 | -------------------------------------------------------------------------------- /Demos/Virtual Explorer/VST Logo 1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Virtual Explorer/VST Logo 1.bmp -------------------------------------------------------------------------------- /Demos/Virtual Explorer/VirtualExplorer.dpr: -------------------------------------------------------------------------------- 1 | program VirtualExplorer; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}, 6 | About in 'About.pas' {AboutBox}; 7 | 8 | {$R *.RES} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.Title := 'Virtual Explorer Demo for VirtualShellTools'; 13 | Application.CreateForm(TForm1, Form1); 14 | Application.CreateForm(TAboutBox, AboutBox); 15 | Application.Run; 16 | end. 17 | -------------------------------------------------------------------------------- /Demos/VirtualDropStack/DropStackProject.dpr: -------------------------------------------------------------------------------- 1 | program DropStackProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/VirtualDropStack/DropStackProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/VirtualDropStack/DropStackProject.res -------------------------------------------------------------------------------- /Demos/VirtualDropStack/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 236 3 | Top = 153 4 | Width = 696 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnShow = FormShow 15 | PixelsPerInch = 96 16 | TextHeight = 13 17 | object Splitter1: TSplitter 18 | Left = 185 19 | Top = 0 20 | Width = 6 21 | Height = 444 22 | ResizeStyle = rsUpdate 23 | end 24 | object Panel1: TPanel 25 | Left = 0 26 | Top = 0 27 | Width = 185 28 | Height = 444 29 | Align = alLeft 30 | TabOrder = 0 31 | object Label1: TLabel 32 | Left = 1 33 | Top = 1 34 | Width = 183 35 | Height = 39 36 | Align = alTop 37 | Caption = 38 | 'Drop File Objects from the Listview to the DropStack Window from' + 39 | ' one or more folders.' 40 | WordWrap = True 41 | end 42 | object Label2: TLabel 43 | Left = 1 44 | Top = 53 45 | Width = 183 46 | Height = 78 47 | Align = alTop 48 | Caption = 49 | 'Browse to some other folder in the Listview and drag the files f' + 50 | 'rom the DropStack to the Listview. Hold the normal modifider ke' + 51 | 'ys (CTRL, ALT, SHIFT) to copy, move or link just as in Explorer.' 52 | WordWrap = True 53 | end 54 | object Label3: TLabel 55 | Left = 1 56 | Top = 40 57 | Width = 183 58 | Height = 13 59 | Align = alTop 60 | end 61 | object Label4: TLabel 62 | Left = 1 63 | Top = 131 64 | Width = 183 65 | Height = 13 66 | Align = alTop 67 | end 68 | object Label5: TLabel 69 | Left = 1 70 | Top = 144 71 | Width = 183 72 | Height = 78 73 | Align = alTop 74 | Caption = 75 | 'WARNING: Only the references to the objects are saved in the Dro' + 76 | 'pStack Window. The original files MUST be available when the ob' + 77 | 'jects are dragged out of the DropStack Window.' 78 | WordWrap = True 79 | end 80 | object Panel2: TPanel 81 | Left = 1 82 | Top = 222 83 | Width = 183 84 | Height = 72 85 | Align = alTop 86 | TabOrder = 0 87 | object CheckBox1: TCheckBox 88 | Left = 84 89 | Top = 8 90 | Width = 85 91 | Height = 17 92 | Caption = 'Show Hint' 93 | TabOrder = 0 94 | OnClick = CheckBox1Click 95 | end 96 | object Button1: TButton 97 | Left = 4 98 | Top = 8 99 | Width = 75 100 | Height = 25 101 | Caption = 'Clear' 102 | TabOrder = 1 103 | OnClick = Button1Click 104 | end 105 | object ComboBox1: TComboBox 106 | Left = 8 107 | Top = 40 108 | Width = 145 109 | Height = 21 110 | Style = csDropDownList 111 | ItemHeight = 13 112 | TabOrder = 2 113 | OnChange = ComboBox1Change 114 | Items.Strings = ( 115 | 'Icon' 116 | 'SmallIcon' 117 | 'elsList' 118 | 'Report' 119 | 'Thumbnail' 120 | 'Tile') 121 | end 122 | end 123 | object VirtualDropStack1: TVirtualDropStack 124 | Left = 1 125 | Top = 294 126 | Width = 183 127 | Height = 149 128 | Align = alClient 129 | BevelKind = bkTile 130 | DragManager.Enabled = True 131 | Selection.EnableDragSelect = True 132 | Selection.MultiSelect = True 133 | Selection.UseFocusRect = False 134 | TabOrder = 1 135 | end 136 | end 137 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 138 | Left = 191 139 | Top = 0 140 | Width = 489 141 | Height = 444 142 | Active = True 143 | Align = alClient 144 | BevelKind = bkTile 145 | CompressedFile.Color = clBlue 146 | CompressedFile.Font.Charset = DEFAULT_CHARSET 147 | CompressedFile.Font.Color = clWindowText 148 | CompressedFile.Font.Height = -11 149 | CompressedFile.Font.Name = 'MS Sans Serif' 150 | CompressedFile.Font.Style = [] 151 | DefaultSortColumn = 0 152 | EditManager.Font.Charset = DEFAULT_CHARSET 153 | EditManager.Font.Color = clWindowText 154 | EditManager.Font.Height = -11 155 | EditManager.Font.Name = 'MS Sans Serif' 156 | EditManager.Font.Style = [] 157 | EncryptedFile.Color = clGreen 158 | EncryptedFile.Font.Charset = DEFAULT_CHARSET 159 | EncryptedFile.Font.Color = clWindowText 160 | EncryptedFile.Font.Height = -11 161 | EncryptedFile.Font.Name = 'MS Sans Serif' 162 | EncryptedFile.Font.Style = [] 163 | ExtensionColorCode = False 164 | DragManager.Enabled = True 165 | FileSizeFormat = vfsfDefault 166 | Grouped = False 167 | GroupingColumn = 0 168 | Options = [eloBrowseExecuteFolder, eloBrowseExecuteFolderShortcut, eloBrowseExecuteZipFolder, eloExecuteOnDblClick, eloThreadedImages, eloThreadedDetails, eloChangeNotifierThread] 169 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 170 | PaintInfoGroup.MarginTop.Visible = False 171 | Sort.Algorithm = esaQuickSort 172 | Sort.AutoSort = True 173 | Selection.AlphaBlend = True 174 | Selection.AlphaBlendSelRect = True 175 | Selection.EnableDragSelect = True 176 | Selection.FullItemPaint = True 177 | Selection.Gradient = True 178 | Selection.MultiSelect = True 179 | Selection.RoundRect = True 180 | Selection.TextColor = clBlue 181 | TabOrder = 1 182 | ThumbsManager.StorageFilename = 'Thumbnails.album' 183 | end 184 | end 185 | -------------------------------------------------------------------------------- /Demos/VirtualDropStack/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, MPCommonObjects, EasyListview, 8 | VirtualExplorerEasyListview, ExtCtrls; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | Panel1: TPanel; 13 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 14 | Label1: TLabel; 15 | Label2: TLabel; 16 | Label3: TLabel; 17 | Label4: TLabel; 18 | Label5: TLabel; 19 | Panel2: TPanel; 20 | CheckBox1: TCheckBox; 21 | Button1: TButton; 22 | ComboBox1: TComboBox; 23 | Splitter1: TSplitter; 24 | VirtualDropStack1: TVirtualDropStack; 25 | procedure CheckBox1Click(Sender: TObject); 26 | procedure Button1Click(Sender: TObject); 27 | procedure FormShow(Sender: TObject); 28 | procedure ComboBox1Change(Sender: TObject); 29 | private 30 | { Private declarations } 31 | public 32 | { Public declarations } 33 | end; 34 | 35 | var 36 | Form1: TForm1; 37 | 38 | implementation 39 | 40 | {$R *.dfm} 41 | 42 | procedure TForm1.CheckBox1Click(Sender: TObject); 43 | begin 44 | VirtualDropStack1.ShowHint := True; 45 | end; 46 | 47 | procedure TForm1.Button1Click(Sender: TObject); 48 | begin 49 | VirtualDropStack1.Items.Clear 50 | end; 51 | 52 | procedure TForm1.FormShow(Sender: TObject); 53 | begin 54 | ComboBox1.ItemIndex := 0; 55 | end; 56 | 57 | procedure TForm1.ComboBox1Change(Sender: TObject); 58 | begin 59 | VirtualDropStack1.View := TEasyListStyle(ComboBox1.ItemIndex) 60 | end; 61 | 62 | end. 63 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListModeView/EasyListModeViewProjectGroup.bpg: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------------ 2 | VERSION = BWS.01 3 | #------------------------------------------------------------------------------ 4 | !ifndef ROOT 5 | ROOT = $(MAKEDIR)\.. 6 | !endif 7 | #------------------------------------------------------------------------------ 8 | MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** 9 | DCC = $(ROOT)\bin\dcc32.exe $** 10 | BRCC = $(ROOT)\bin\brcc32.exe $** 11 | #------------------------------------------------------------------------------ 12 | PROJECTS = EasyListviewD7.bpl EasyListviewD7D.bpl VirtualShellToolsD7.bpl \ 13 | VirtualShellToolsD7D.bpl VirtualExplorerListModeViewProject.exe 14 | #------------------------------------------------------------------------------ 15 | default: $(PROJECTS) 16 | #------------------------------------------------------------------------------ 17 | 18 | VirtualExplorerListModeViewProject.exe: VirtualExplorerListModeViewProject.dpr 19 | $(DCC) 20 | 21 | EasyListviewD7.bpl: ..\..\..\EasyListview\Delphi\EasyListviewD7.dpk 22 | $(DCC) 23 | 24 | EasyListviewD7D.bpl: ..\..\..\EasyListview\Delphi\EasyListviewD7D.dpk 25 | $(DCC) 26 | 27 | VirtualShellToolsD7.bpl: ..\..\Delphi\VirtualShellToolsD7.dpk 28 | $(DCC) 29 | 30 | VirtualShellToolsD7D.bpl: ..\..\Delphi\VirtualShellToolsD7D.dpk 31 | $(DCC) 32 | 33 | 34 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListModeView/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 372 3 | Top = 233 4 | Width = 696 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clWindow 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Shell Dlg 2' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | OnShow = FormShow 15 | PixelsPerInch = 96 16 | TextHeight = 13 17 | object VirtualExplorerCombobox1: TVirtualExplorerCombobox 18 | Left = 0 19 | Top = 41 20 | Width = 680 21 | Active = True 22 | Align = alTop 23 | TabOrder = 0 24 | Path = 'VirtualExplorerCombobox1' 25 | TextType = ecbtFullPath 26 | end 27 | object VirtualColumnModeView1: TVirtualColumnModeView 28 | Left = 0 29 | Top = 64 30 | Width = 680 31 | Height = 380 32 | HorzScrollBar.Tracking = True 33 | VertScrollBar.Smooth = True 34 | VertScrollBar.Tracking = True 35 | Align = alClient 36 | ParentColor = False 37 | TabOrder = 1 38 | ExplorerCombobox = VirtualExplorerCombobox1 39 | GroupingColumn = 0 40 | SmoothScrollDelta = 0 41 | end 42 | object Panel1: TPanel 43 | Left = 0 44 | Top = 0 45 | Width = 680 46 | Height = 41 47 | Align = alTop 48 | TabOrder = 2 49 | object CheckBox1: TCheckBox 50 | Left = 16 51 | Top = 8 52 | Width = 97 53 | Height = 17 54 | Caption = 'Active' 55 | TabOrder = 0 56 | OnClick = CheckBox1Click 57 | end 58 | end 59 | end 60 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListModeView/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 7 | Dialogs, ExtCtrls, VirtualExplorerEasyListModeview, VirtualTrees, 8 | VirtualExplorerTree, StdCtrls, ComCtrls, MPCommonObjects, EasyListview, 9 | VirtualExplorerEasyListview; 10 | 11 | type 12 | TForm1 = class(TForm) 13 | VirtualExplorerCombobox1: TVirtualExplorerCombobox; 14 | VirtualColumnModeView1: TVirtualColumnModeView; 15 | Panel1: TPanel; 16 | CheckBox1: TCheckBox; 17 | procedure CheckBox1Click(Sender: TObject); 18 | procedure VirtualExplorerCombobox1Change(Sender: TObject); 19 | procedure FormShow(Sender: TObject); 20 | private 21 | { Private declarations } 22 | public 23 | { Public declarations } 24 | end; 25 | 26 | var 27 | Form1: TForm1; 28 | 29 | implementation 30 | 31 | {$R *.dfm} 32 | 33 | procedure TForm1.CheckBox1Click(Sender: TObject); 34 | begin 35 | VirtualColumnModeView1.Active := CheckBox1.Checked 36 | end; 37 | 38 | procedure TForm1.VirtualExplorerCombobox1Change(Sender: TObject); 39 | begin 40 | VirtualColumnModeView1.Path := VirtualExplorerCombobox1.EditNamespace.Clone(True) 41 | end; 42 | 43 | procedure TForm1.FormShow(Sender: TObject); 44 | begin 45 | // VirtualColumnModeView1.Color := clWindow; 46 | end; 47 | 48 | end. 49 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListModeView/VirtualExplorerListModeViewProject.dpr: -------------------------------------------------------------------------------- 1 | program VirtualExplorerListModeViewProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}, 6 | VirtualExplorerEasyListModeview in '..\..\Source\VirtualExplorerEasyListModeview.pas'; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListModeView/VirtualExplorerListModeViewProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/VirtualEasyListModeView/VirtualExplorerListModeViewProject.res -------------------------------------------------------------------------------- /Demos/VirtualEasyListviewCustomContextMenu/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 281 3 | Top = 110 4 | Width = 696 5 | Height = 480 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 17 | Left = 0 18 | Top = 0 19 | Width = 688 20 | Height = 446 21 | Active = True 22 | Align = alClient 23 | DefaultSortColumn = 0 24 | Font.Charset = DEFAULT_CHARSET 25 | Font.Color = clWindowText 26 | Font.Height = -11 27 | Font.Name = 'MS Shell Dlg 2' 28 | Font.Style = [] 29 | Grouped = False 30 | GroupingColumn = 0 31 | GroupFont.Charset = DEFAULT_CHARSET 32 | GroupFont.Color = clWindowText 33 | GroupFont.Height = -11 34 | GroupFont.Name = 'MS Shell Dlg 2' 35 | GroupFont.Style = [] 36 | Header.Font.Charset = DEFAULT_CHARSET 37 | Header.Font.Color = clWindowText 38 | Header.Font.Height = -11 39 | Header.Font.Name = 'MS Shell Dlg 2' 40 | Header.Font.Style = [] 41 | Options = [eloBrowseExecuteFolder, eloBrowseExecuteFolderShortcut, eloBrowseExecuteZipFolder, eloExecuteOnDblClick, eloThreadedImages, eloThreadedDetails, eloShellContextMenus] 42 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 43 | PaintInfoGroup.MarginTop.Visible = False 44 | ParentFont = False 45 | Sort.AutoSort = True 46 | TabOrder = 0 47 | ThumbsManager.StorageFilename = 'Thumbnails.album' 48 | View = elsIcon 49 | OnContextMenuCmd = VirtualExplorerEasyListview1ContextMenuCmd 50 | OnContextMenuShow = VirtualExplorerEasyListview1ContextMenuShow 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListviewCustomContextMenu/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, MPCommonObjects, EasyListview, VirtualExplorerEasyListview, 8 | MPCommonUtilities, MPShellUtilities; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 13 | procedure VirtualExplorerEasyListview1ContextMenuShow( 14 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 15 | Menu: HMENU; var Allow: Boolean); 16 | procedure VirtualExplorerEasyListview1ContextMenuCmd( 17 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 18 | Verb: string; MenuItemID: Integer; var Handled: Boolean); 19 | private 20 | { Private declarations } 21 | public 22 | { Public declarations } 23 | CustomMenuID: Integer; 24 | end; 25 | 26 | var 27 | Form1: TForm1; 28 | 29 | implementation 30 | 31 | {$R *.dfm} 32 | 33 | procedure TForm1.VirtualExplorerEasyListview1ContextMenuShow( 34 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 35 | Menu: HMENU; var Allow: Boolean); 36 | begin 37 | // Add to the end; 38 | CustomMenuID := AddContextMenuItem(Menu, '-', -1); 39 | CustomMenuID := AddContextMenuItem(Menu, 'Custom Menu', -1); 40 | end; 41 | 42 | procedure TForm1.VirtualExplorerEasyListview1ContextMenuCmd( 43 | Sender: TCustomVirtualExplorerEasyListview; Namespace: TNamespace; 44 | Verb: string; MenuItemID: Integer; var Handled: Boolean); 45 | begin 46 | if MenuItemID = CustomMenuID then 47 | begin 48 | beep; 49 | end 50 | end; 51 | 52 | end. 53 | -------------------------------------------------------------------------------- /Demos/VirtualEasyListviewCustomContextMenu/VirtaulExplorerEasyListviewMEnuProject.dpr: -------------------------------------------------------------------------------- 1 | program VirtaulExplorerEasyListviewMEnuProject; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/VirtualExplorerEasyListview/VEasyListviewProject.dpr: -------------------------------------------------------------------------------- 1 | program VEasyListviewProject; 2 | 3 | uses 4 | Forms, 5 | SysUtils, 6 | Unit1 in 'Unit1.pas' {Form1}; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /Demos/VirtualExplorerEasyListview/VEasyListviewProject.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/VirtualExplorerEasyListview/VEasyListviewProject.res -------------------------------------------------------------------------------- /Demos/VirtualShellToolsDemos.bpg: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------------ 2 | VERSION = BWS.01 3 | #------------------------------------------------------------------------------ 4 | !ifndef ROOT 5 | ROOT = $(MAKEDIR)\.. 6 | !endif 7 | #------------------------------------------------------------------------------ 8 | MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** 9 | DCC = $(ROOT)\bin\dcc32.exe $** 10 | BRCC = $(ROOT)\bin\brcc32.exe $** 11 | #------------------------------------------------------------------------------ 12 | PROJECTS = ShellDetailsCustomColumns.exe AutoCompleteComponentProject.exe \ 13 | CheckBoxes.exe VET.exe ShellLinkShortcuts.exe ShellNotify.exe \ 14 | ShellColumnStateStoring.exe ShellNew_NewFileMenu.exe ShellToolbars.exe \ 15 | VirtualExplorer.exe ShellHistory.exe FolderSizeDemo.exe ExplorerCheckboxes.exe \ 16 | FileSearch.exe SendToMenuProject.exe UserDataProject.exe \ 17 | DOSCommandLineProject.exe CustomSortProject.exe VEasyListviewProject.exe \ 18 | EasyListviewPrevFolderProject.exe FileSearchProject.exe BkGndMenuProject.exe 19 | #------------------------------------------------------------------------------ 20 | default: $(PROJECTS) 21 | #------------------------------------------------------------------------------ 22 | 23 | ShellDetailsCustomColumns.exe: Adding Custom Columns Using ShellDetails\ShellDetailsCustomColumns.dpr 24 | $(DCC) 25 | 26 | CheckBoxes.exe: CheckBoxes\CheckBoxes.dpr 27 | $(DCC) 28 | 29 | VET.exe: Overview\VET.dpr 30 | $(DCC) 31 | 32 | ShellLinkShortcuts.exe: Shell Link Shortcuts\ShellLinkShortcuts.dpr 33 | $(DCC) 34 | 35 | ShellNotify.exe: Shell Notify\ShellNotify.dpr 36 | $(DCC) 37 | 38 | ShellColumnStateStoring.exe: ShellColumn State Storing\ShellColumnStateStoring.dpr 39 | $(DCC) 40 | 41 | ShellNew_NewFileMenu.exe: ShellNew (New File) Menu\ShellNew_NewFileMenu.dpr 42 | $(DCC) 43 | 44 | ShellToolbars.exe: ShellToolbars\ShellToolbars.dpr 45 | $(DCC) 46 | 47 | VirtualExplorer.exe: Virtual Explorer\VirtualExplorer.dpr 48 | $(DCC) 49 | 50 | ShellHistory.exe: Shell History\ShellHistory.dpr 51 | $(DCC) 52 | 53 | FolderSizeDemo.exe: FolderSize\FolderSizeDemo.dpr 54 | $(DCC) 55 | 56 | AutoCompleteComponentProject.exe: AutoComplete Component\AutoCompleteComponentProject.dpr 57 | $(DCC) 58 | 59 | ExplorerCheckboxes.exe: Explorer CheckBoxes\ExplorerCheckboxes.dpr 60 | $(DCC) 61 | 62 | FileSearch.exe: File Search\FileSearch.dpr 63 | $(DCC) 64 | 65 | SendToMenuProject.exe: SendTo Menu\SendToMenuProject.dpr 66 | $(DCC) 67 | 68 | UserDataProject.exe: User Data\UserDataProject.dpr 69 | $(DCC) 70 | 71 | DOSCommandLineProject.exe: DOS Shell CommandLine\DOSCommandLineProject.dpr 72 | $(DCC) 73 | 74 | CustomSortProject.exe: Custom Sorting\CustomSortProject.dpr 75 | $(DCC) 76 | 77 | VEasyListviewProject.exe: VirtualExplorerEasyListview\VEasyListviewProject.dpr 78 | $(DCC) 79 | 80 | EasyListviewPrevFolderProject.exe: PrevDirNode EasyListview\EasyListviewPrevFolderProject.dpr 81 | $(DCC) 82 | 83 | FileSearchProject.exe: FileSearch\FileSearchProject.dpr 84 | $(DCC) 85 | 86 | BkGndMenuProject.exe: Backgnd Menu\BkGndMenuProject.dpr 87 | $(DCC) 88 | 89 | 90 | -------------------------------------------------------------------------------- /Demos/Wow64 File Redirection/Unit1.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 369 3 | Top = 221 4 | Width = 792 5 | Height = 615 6 | Caption = 'Form1' 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'MS Sans Serif' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | DesignSize = ( 15 | 776 16 | 577) 17 | PixelsPerInch = 96 18 | TextHeight = 13 19 | object Label1: TLabel 20 | Left = 48 21 | Top = 40 22 | Width = 689 23 | Height = 13 24 | Caption = 25 | 'If VSTools is compiled into a 32 Bit application access to syste' + 26 | 'm folders that are reserved for 64 Bit files are redirected to a' + 27 | ' equivalient 32 Bit Folder' 28 | end 29 | object Label2: TLabel 30 | Left = 48 31 | Top = 64 32 | Width = 650 33 | Height = 13 34 | Caption = 35 | 'By disabling redirection a 32 Bit application can access the 64 ' + 36 | 'Bit folder. In 64 Bit Windows the System32 Folder is reserved f' + 37 | 'or 64 Bit files' 38 | end 39 | object Label3: TLabel 40 | Left = 48 41 | Top = 88 42 | Width = 658 43 | Height = 13 44 | Caption = 45 | 'and will typically redirect into the SysWow64 Bit folder. Use t' + 46 | 'he Disable Wow64 Redirection flag in VSTools to access 64 Bit sy' + 47 | 'stem folders.' 48 | end 49 | object VirtualExplorerEasyListview1: TVirtualExplorerEasyListview 50 | Left = 16 51 | Top = 112 52 | Width = 737 53 | Height = 449 54 | Active = True 55 | Anchors = [akLeft, akTop, akRight, akBottom] 56 | CompressedFile.Color = clBlue 57 | CompressedFile.Font.Charset = DEFAULT_CHARSET 58 | CompressedFile.Font.Color = clWindowText 59 | CompressedFile.Font.Height = -11 60 | CompressedFile.Font.Name = 'MS Sans Serif' 61 | CompressedFile.Font.Style = [] 62 | DefaultSortColumn = 0 63 | EditManager.Font.Charset = DEFAULT_CHARSET 64 | EditManager.Font.Color = clWindowText 65 | EditManager.Font.Height = -11 66 | EditManager.Font.Name = 'MS Sans Serif' 67 | EditManager.Font.Style = [] 68 | EncryptedFile.Color = clGreen 69 | EncryptedFile.Font.Charset = DEFAULT_CHARSET 70 | EncryptedFile.Font.Color = clWindowText 71 | EncryptedFile.Font.Height = -11 72 | EncryptedFile.Font.Name = 'MS Sans Serif' 73 | EncryptedFile.Font.Style = [] 74 | FileSizeFormat = vfsfDefault 75 | Grouped = False 76 | GroupingColumn = 0 77 | PaintInfoGroup.MarginBottom.CaptionIndent = 4 78 | PaintInfoGroup.MarginTop.Visible = False 79 | Sort.Algorithm = esaQuickSort 80 | Sort.AutoSort = True 81 | TabOrder = 0 82 | ThumbsManager.StorageFilename = 'Thumbnails.album' 83 | end 84 | object CheckBox1: TCheckBox 85 | Left = 24 86 | Top = 16 87 | Width = 233 88 | Height = 17 89 | Caption = 'Disable WOW64 Bit File Redirecction' 90 | TabOrder = 1 91 | OnClick = CheckBox1Click 92 | end 93 | end 94 | -------------------------------------------------------------------------------- /Demos/Wow64 File Redirection/Unit1.pas: -------------------------------------------------------------------------------- 1 | unit Unit1; 2 | 3 | interface 4 | 5 | uses 6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 | Dialogs, StdCtrls, Buttons, MPCommonObjects, EasyListview, 8 | VirtualExplorerEasyListview, MPCommonUtilities; 9 | 10 | type 11 | TForm1 = class(TForm) 12 | VirtualExplorerEasyListview1: TVirtualExplorerEasyListview; 13 | CheckBox1: TCheckBox; 14 | Label1: TLabel; 15 | Label2: TLabel; 16 | Label3: TLabel; 17 | procedure CheckBox1Click(Sender: TObject); 18 | private 19 | { Private declarations } 20 | public 21 | { Public declarations } 22 | end; 23 | 24 | var 25 | Form1: TForm1; 26 | 27 | implementation 28 | 29 | {$R *.dfm} 30 | 31 | procedure TForm1.CheckBox1Click(Sender: TObject); 32 | begin 33 | Wow64Enabled := CheckBox1.Checked; 34 | VirtualExplorerEasyListview1.Rebuild(True); 35 | end; 36 | 37 | end. 38 | -------------------------------------------------------------------------------- /Demos/Wow64 File Redirection/Wow64FileRedirection.dpr: -------------------------------------------------------------------------------- 1 | program Wow64FileRedirection; 2 | 3 | uses 4 | Forms, 5 | Unit1 in 'Unit1.pas' {Form1}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.CreateForm(TForm1, Form1); 12 | Application.Run; 13 | end. 14 | -------------------------------------------------------------------------------- /Demos/Wow64 File Redirection/Wow64FileRedirection.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Demos/Wow64 File Redirection/Wow64FileRedirection.res -------------------------------------------------------------------------------- /Design/VirtualShellToolsReg.dcr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Design/VirtualShellToolsReg.dcr -------------------------------------------------------------------------------- /Design/VirtualShellToolsReg.pas: -------------------------------------------------------------------------------- 1 | unit VirtualShellToolsReg; 2 | 3 | // Version 2.3.0 4 | // 5 | // The contents of this file are subject to the Mozilla Public License 6 | // Version 1.1 (the "License"); you may not use this file except in compliance 7 | // with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ 8 | // 9 | // Alternatively, you may redistribute this library, use and/or modify it under the terms of the 10 | // GNU Lesser General Public License as published by the Free Software Foundation; 11 | // either version 2.1 of the License, or (at your option) any later version. 12 | // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. 13 | // 14 | // Software distributed under the License is distributed on an "AS IS" basis, 15 | // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 16 | // specific language governing rights and limitations under the License. 17 | // 18 | // The initial developer of this code is Jim Kueneman 19 | // 20 | //---------------------------------------------------------------------------- 21 | 22 | 23 | interface 24 | 25 | {$include ..\Include\AddIns.inc} 26 | 27 | // If you are upgrading from VSTools 0.9.xx or earlier uncomment the conditional 28 | // define. By doing so the old components ExplorerTreeview, ExplorerListview, 29 | // and ExplorerCombobox will also be installed in the palette. This way your 30 | // projects can be opened then show the form as text and change the TExplorerXXXX 31 | // object types to TVirtualExplorerXXXXX then let Delphi update what it needs to 32 | // by answering yes to the questions when the text is then shown again as a Form. 33 | // I updated all the demos this way and it was suprisingly painless. 34 | 35 | uses 36 | Windows, Messages, SysUtils, Classes, Controls, 37 | VirtualShellToolbar, VirtualExplorerTree, StdCtrls, MPShellUtilities, 38 | VirtualShellNewMenu, AppletsAndWizards, VirtualShellHistory, 39 | VirtualShellAutoComplete, VirtualSendToMenu, VirtualRedirector, 40 | VirtualExplorerEasyListview, VirtualFileSearch, 41 | VirtualExplorerEasyListModeview, 42 | VirtualBreadCrumbBar, 43 | DesignIntf, DesignEditors; 44 | 45 | procedure Register; 46 | 47 | implementation 48 | 49 | const 50 | sELVEnumerationCategory = 'Enumeration'; 51 | sELVStorageCategory = 'Storage'; 52 | sELVCustomCategory = 'Custom Columns and Groups'; 53 | sELVRootCategory = 'Root Namespace'; 54 | sELVShellCategory = 'Shell'; 55 | sELVCustomClassesCategory = 'Custom Object Classes'; 56 | 57 | procedure Register; 58 | begin 59 | // Unicode Controls 60 | RegisterComponents('Virtual Controls', [TWideSpeedButton]); 61 | RegisterComponents('VirtualShellTools', [TVirtualExplorerComboBox]); 62 | 63 | // Virtual Explorer Tree Components 64 | RegisterComponents('VirtualShellTools', [TVirtualExplorerTree, TVirtualExplorerTreeview, 65 | TVirtualExplorerListview, TVirtualDropStack]); 66 | 67 | // Virtual Virtual Shell Toolbar Components 68 | RegisterComponents('VirtualShellTools', [TVirtualShellToolbar, TVirtualDriveToolbar, 69 | TVirtualSpecialFolderToolbar]); 70 | 71 | // Assorted ShellTools Components 72 | RegisterComponents('VirtualShellTools', [TVirtualShellLink, TVirtualShellNewMenu, 73 | TVirtualShellHistory, TVirtualShellMRU, TVirtualShellAutoComplete, TVirtualSendToMenu, 74 | TVirtualFileSearch, TVirtualShellMultiParentContextMenu, TVirtualShellBackgroundContextMenu, 75 | TVirtualBreadCrumbBar]); 76 | 77 | // Applets, Wizards, and Shell Dialogs Components 78 | RegisterComponents('VirtualShellTools', [TVirtualRunFileDialog]); 79 | 80 | // Redirector Components 81 | RegisterComponents('VirtualShellTools', [TVirtualCommandLineRedirector, 82 | TVirtualRedirector]); 83 | 84 | // EasyListview Components 85 | RegisterComponents('VirtualShellTools', [TVirtualExplorerEasyListview, 86 | TVirtualMultiPathExplorerEasyListview, TVirtualColumnModeView]); 87 | 88 | RegisterPropertiesInCategory(sELVEnumerationCategory, TCustomVirtualExplorerEasyListview, 89 | ['OnEnum*'] ); 90 | 91 | RegisterPropertiesInCategory(sELVStorageCategory, TCustomVirtualExplorerEasyListview, 92 | ['*Storage*'] ); 93 | 94 | RegisterPropertiesInCategory(sELVCustomCategory, TCustomVirtualExplorerEasyListview, 95 | ['OnCustom*'] ); 96 | 97 | RegisterPropertiesInCategory(sELVRootCategory, TCustomVirtualExplorerEasyListview, 98 | ['OnRoot*', 99 | 'OnInvalidRoot*'] ); 100 | 101 | RegisterPropertiesInCategory(sELVShellCategory, TCustomVirtualExplorerEasyListview, 102 | ['OnShell*'] ); 103 | 104 | RegisterPropertiesInCategory(sELVCustomClassesCategory, TCustomVirtualExplorerEasyListview, 105 | ['On*Class'] ); 106 | end; 107 | 108 | end. 109 | 110 | 111 | -------------------------------------------------------------------------------- /Docs/CBuilder 6 Issues.txt: -------------------------------------------------------------------------------- 1 | 2 | Issues with C++Builder 6 3 | 4 | 1) ThemeManager is not put on the Include Path for the project automatically. 5 | 6 | Project > Options > Directories/Conditionals 7 | 8 | Browse to the install path for 9 | 10 | ${ThemeManagerInstallPath}\Source 11 | 12 | and add it to the list. 13 | 14 | 2) The uxtheme.h file has bug in it. Replace the version that comes with 15 | C++Builder 6 with the supplied version. 16 | 17 | ${CBuilderINstallPath}\Include\uxtheme.h 18 | 19 | 20 | Drop a VirtualExplorerTree component on a form and compile! 21 | 22 | Enjoy, 23 | Jim -------------------------------------------------------------------------------- /Docs/Unicode Compatibilty.txt: -------------------------------------------------------------------------------- 1 | The following function/routines are not 100% WideString implemented: 2 | 3 | 4 | ////// 5 | MPShellUtilities.pas 6 | ///// 7 | 8 | function ConvertLocalStrToTFileTime(LocalStr: WideString; var FileTime: TFileTime): Boolean; 9 | 10 | function ConvertTFileTimeToLocalStr(AFileTime: TFILETIME): WideString; 11 | 12 | Format 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Include/Addins.inc: -------------------------------------------------------------------------------- 1 | // The packages must be rebuilt to make the changes in this file active 2 | 3 | // ----------------------------------------------------------------------------- 4 | // TOOLBAR 2000 and TBX SUPPORT FOR VIRTUALSHELLHISTORY MENU 5 | // ----------------------------------------------------------------------------- 6 | // 7 | // Uncomment out the conditional define for Toolbar 2000 and TBX Toolbar support 8 | // 9 | // WARNING: WARNING: WARNING: WARNING: WARNING: WARNING: WARNING: WARNING: WARNING: 10 | // 11 | // You must either add the Tooolbar 2000 and/or the SpTBXLib packages to the 12 | // VirtualShellToolsDx.dpk "Requires" section. 13 | // This is easier if you open the VirtualShellToolsDx.dpk with a text editor and add this: 14 | // 15 | // E,g, For D6: 16 | // 17 | // requires 18 | // VirtualTreesD6, 19 | // VirtualToolsCommonD6, 20 | // ThemeManager6 21 | // tb2k_d6, 22 | // SpTbxLib_d6; 23 | // 24 | // Then recompile VSTools 25 | // 26 | // DO NOT allow Delphi to add the units to the "Contains" section automaticlly 27 | // if you forget to add the packages to the "Requires" section. 28 | 29 | // Define USE_TOOLBAR_TB2K if you use Toolbar 2000, SpTBXLib 30 | {.$DEFINE USE_TOOLBAR_TB2K} 31 | // Define SpTBX if you use SpTBXLib 32 | {.$DEFINE SpTBX} 33 | 34 | // ----------------------------------------------------------------------------- 35 | // 36 | 37 | // Strips particular component from the package to reduce EXE size in final application 38 | // 39 | // 40 | {$DEFINE EXPLORERCOMBOBOX_L} 41 | {$DEFINE EXPLORERLISTVIEW_L} 42 | {$DEFINE EXPLORERTREE_L} 43 | {$DEFINE EXPLORERTREEVIEW_L} 44 | // ----------------------------------------------------------------------------- 45 | 46 | // ImageEn SUPPORT 47 | // You must add the ImageEn package to the VirtualShellToolsD.dpk "Requires" section PKIECtrl28 48 | // You may need to add Path to ImageEn: Delphi Compiler, Windows 64bit, Search path \ImageEn\Source\Delphi11Alexandria_64 49 | 50 | // {$DEFINE USEIMAGEEN} 51 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | Mustangpeak Common Library 2 | 3 | The contents of this file are subject to the Mozilla Public License 4 | Version 1.1 (the "License"); you may not use this file except 5 | in compliance with the License. You may obtain a copy of the 6 | License at http://www.mozilla.org/MPL/. 7 | 8 | Alternatively, you may redistribute this library, use and/or modify it under the terms of the 9 | GNU Lesser General Public License as published by the Free Software Foundation; 10 | either version 2.1 of the License, or (at your option) any later version. 11 | You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. 12 | 13 | Software distributed under the License is distributed on an 14 | "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or 15 | implied. See the License for the specific language governing rights 16 | and limitations under the License. 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Resources/Images/Bkgnd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/Bkgnd.bmp -------------------------------------------------------------------------------- /Resources/Images/Folder Funnel 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/Folder Funnel 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/Setup Gear 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/Setup Gear 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/Setup Gear 32x32.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/Setup Gear 32x32.bmp -------------------------------------------------------------------------------- /Resources/Images/VET_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/VET_Logo.png -------------------------------------------------------------------------------- /Resources/Images/ViewButton.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/ViewButton.bmp -------------------------------------------------------------------------------- /Resources/Images/XDisk.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XDisk.bmp -------------------------------------------------------------------------------- /Resources/Images/XPBackArrow 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPBackArrow 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/XPBackArrow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPBackArrow.bmp -------------------------------------------------------------------------------- /Resources/Images/XPFolders 16x16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPFolders 16x16.bmp -------------------------------------------------------------------------------- /Resources/Images/XPFolders 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPFolders 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/XPFolders.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPFolders.bmp -------------------------------------------------------------------------------- /Resources/Images/XPHistory 16x16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPHistory 16x16.bmp -------------------------------------------------------------------------------- /Resources/Images/XPHistory 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPHistory 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/XPListviewStyle.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPListviewStyle.bmp -------------------------------------------------------------------------------- /Resources/Images/XPNextArrow 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPNextArrow 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/XPNextArrow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPNextArrow.bmp -------------------------------------------------------------------------------- /Resources/Images/XPSearch 24x24.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPSearch 24x24.bmp -------------------------------------------------------------------------------- /Resources/Images/XPSearch.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPSearch.bmp -------------------------------------------------------------------------------- /Resources/Images/XPSearch2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPSearch2.bmp -------------------------------------------------------------------------------- /Resources/Images/XPSearch2Small.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPSearch2Small.bmp -------------------------------------------------------------------------------- /Resources/Images/XPUpFolder.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Resources/Images/XPUpFolder.bmp -------------------------------------------------------------------------------- /Source/ColumnForm.dfm: -------------------------------------------------------------------------------- 1 | object FormColumnSettings: TFormColumnSettings 2 | Left = 364 3 | Top = 252 4 | BorderIcons = [biSystemMenu] 5 | Caption = 'Column Settings' 6 | ClientHeight = 369 7 | ClientWidth = 297 8 | Color = clBtnFace 9 | Constraints.MinHeight = 370 10 | Constraints.MinWidth = 295 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Tahoma' 15 | Font.Style = [] 16 | KeyPreview = True 17 | Position = poScreenCenter 18 | OnCreate = FormCreate 19 | OnKeyPress = FormKeyPress 20 | OnShow = FormShow 21 | TextHeight = 13 22 | object Panel1: TPanel 23 | Left = 0 24 | Top = 0 25 | Width = 297 26 | Height = 35 27 | Align = alTop 28 | BevelOuter = bvNone 29 | BorderWidth = 4 30 | TabOrder = 0 31 | object Label1: TLabel 32 | Left = 4 33 | Top = 4 34 | Width = 289 35 | Height = 27 36 | Align = alTop 37 | Alignment = taCenter 38 | AutoSize = False 39 | Caption = 40 | 'Check the columns you would like to make visible in this Folder.' + 41 | ' Drag and Drop to reorder the columns. ' 42 | WordWrap = True 43 | end 44 | end 45 | object VSTColumnNames: TVirtualStringTree 46 | Left = 0 47 | Top = 35 48 | Width = 297 49 | Height = 235 50 | Align = alClient 51 | Header.AutoSizeIndex = 0 52 | Header.DefaultHeight = 17 53 | Header.Height = 17 54 | Header.MainColumn = -1 55 | Header.Options = [hoColumnResize, hoDrag] 56 | TabOrder = 1 57 | TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoScrollOnExpand, toAutoTristateTracking, toAutoChangeScale] 58 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toInitOnSave, toToggleOnDblClick] 59 | TreeOptions.PaintOptions = [toShowButtons, toShowRoot, toThemeAware, toUseBlendedImages] 60 | OnChecking = VSTColumnNamesChecking 61 | OnDragAllowed = VSTColumnNamesDragAllowed 62 | OnDragOver = VSTColumnNamesDragOver 63 | OnDragDrop = VSTColumnNamesDragDrop 64 | OnFocusChanging = VSTColumnNamesFocusChanging 65 | OnFreeNode = VSTColumnNamesFreeNode 66 | OnGetText = VSTColumnNamesGetText 67 | OnInitNode = VSTColumnNamesInitNode 68 | Touch.InteractiveGestures = [igPan, igPressAndTap] 69 | Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] 70 | Columns = <> 71 | end 72 | object pnBottom: TPanel 73 | Left = 0 74 | Top = 270 75 | Width = 297 76 | Height = 99 77 | Align = alBottom 78 | BevelOuter = bvNone 79 | TabOrder = 2 80 | DesignSize = ( 81 | 297 82 | 99) 83 | object Bevel1: TBevel 84 | Left = 16 85 | Top = -11 86 | Width = 270 87 | Height = 70 88 | Anchors = [akLeft, akTop, akRight] 89 | Shape = bsBottomLine 90 | end 91 | object Label2: TLabel 92 | Left = 15 93 | Top = 11 94 | Width = 165 95 | Height = 13 96 | Alignment = taCenter 97 | Caption = 'Width of selected column in pixels:' 98 | OnClick = FormCreate 99 | end 100 | object CheckBoxLiveUpdate: TCheckBox 101 | Left = 15 102 | Top = 33 103 | Width = 272 104 | Height = 17 105 | Anchors = [akLeft, akTop, akRight] 106 | Caption = 'Live Update' 107 | TabOrder = 0 108 | OnClick = CheckBoxLiveUpdateClick 109 | end 110 | object EditPixelWidth: TEdit 111 | Left = 238 112 | Top = 6 113 | Width = 48 114 | Height = 21 115 | Anchors = [akTop, akRight] 116 | TabOrder = 1 117 | OnExit = EditPixelWidthExit 118 | OnKeyPress = EditPixelWidthKeyPress 119 | end 120 | object ButtonCancel: TButton 121 | Left = 208 122 | Top = 65 123 | Width = 75 124 | Height = 25 125 | Anchors = [] 126 | Caption = '&Cancel' 127 | ModalResult = 2 128 | TabOrder = 2 129 | end 130 | object ButtonOk: TButton 131 | Left = 115 132 | Top = 65 133 | Width = 75 134 | Height = 25 135 | Anchors = [] 136 | Caption = '&OK' 137 | ModalResult = 1 138 | TabOrder = 3 139 | end 140 | end 141 | end 142 | -------------------------------------------------------------------------------- /Source/ColumnFormTBX.dfm: -------------------------------------------------------------------------------- 1 | object FormColumnSettings: TFormColumnSettings 2 | Left = 364 3 | Top = 252 4 | Width = 295 5 | Height = 370 6 | BorderIcons = [biSystemMenu] 7 | Caption = 'Column Settings' 8 | Color = clBtnFace 9 | Constraints.MinHeight = 370 10 | Constraints.MinWidth = 295 11 | Font.Charset = DEFAULT_CHARSET 12 | Font.Color = clWindowText 13 | Font.Height = -11 14 | Font.Name = 'Tahoma' 15 | Font.Style = [] 16 | KeyPreview = True 17 | OldCreateOrder = False 18 | Position = poScreenCenter 19 | OnCreate = FormCreate 20 | OnKeyPress = FormKeyPress 21 | OnResize = FormResize 22 | OnShow = FormShow 23 | DesignSize = ( 24 | 287 25 | 336) 26 | PixelsPerInch = 96 27 | TextHeight = 13 28 | object Bevel1: TBevel 29 | Left = 16 30 | Top = 280 31 | Width = 252 32 | Height = 14 33 | Anchors = [akLeft, akTop, akRight, akBottom] 34 | Shape = bsBottomLine 35 | end 36 | object Label2: TTBXLabel 37 | Left = 10 38 | Top = 246 39 | Width = 149 40 | Height = 13 41 | Alignment = taCenter 42 | Anchors = [akBottom] 43 | Caption = 'The selected column should be ' 44 | OnClick = FormCreate 45 | end 46 | object Label3: TTBXLabel 47 | Left = 211 48 | Top = 246 49 | Width = 52 50 | Height = 13 51 | Anchors = [akBottom] 52 | Caption = 'pixels wide' 53 | end 54 | object Panel1: TPanel 55 | Left = 0 56 | Top = 0 57 | Width = 287 58 | Height = 35 59 | Align = alTop 60 | BevelOuter = bvNone 61 | BorderWidth = 4 62 | TabOrder = 0 63 | object Label1: TTBXLabel 64 | Left = 4 65 | Top = 4 66 | Width = 279 67 | Height = 27 68 | Align = alClient 69 | Alignment = taCenter 70 | AutoSize = False 71 | Caption = 72 | 'Check the columns you would like to make visible in this Folder.' + 73 | ' Drag and Drop to reorder the columns. ' 74 | Font.Charset = DEFAULT_CHARSET 75 | Font.Color = clWindowText 76 | Font.Height = -11 77 | Font.Name = 'MS Sans Serif' 78 | Font.Style = [] 79 | ParentFont = False 80 | end 81 | end 82 | object CheckBoxLiveUpdate: TTBXCheckBox 83 | Left = 18 84 | Top = 268 85 | Width = 258 86 | Height = 17 87 | Anchors = [akRight, akBottom] 88 | Caption = 'Live Update' 89 | TabOrder = 1 90 | OnClick = CheckBoxLiveUpdateClick 91 | end 92 | object ButtonOk: TTBXButton 93 | Left = 104 94 | Top = 304 95 | Width = 75 96 | Height = 21 97 | Anchors = [akRight, akBottom] 98 | Caption = '&OK' 99 | ModalResult = 1 100 | TabOrder = 2 101 | end 102 | object ButtonCancel: TTBXButton 103 | Left = 192 104 | Top = 304 105 | Width = 75 106 | Height = 21 107 | Anchors = [akRight, akBottom] 108 | Caption = '&Cancel' 109 | ModalResult = 2 110 | TabOrder = 3 111 | end 112 | object VSTColumnNames: TVirtualStringTree 113 | Left = 6 114 | Top = 47 115 | Width = 273 116 | Height = 186 117 | Anchors = [akLeft, akTop, akRight, akBottom] 118 | CheckImageKind = ckXP 119 | Header.AutoSizeIndex = 0 120 | Header.Font.Charset = DEFAULT_CHARSET 121 | Header.Font.Color = clWindowText 122 | Header.Font.Height = -11 123 | Header.Font.Name = 'MS Sans Serif' 124 | Header.Font.Style = [] 125 | Header.MainColumn = -1 126 | Header.Options = [hoColumnResize, hoDrag] 127 | HintAnimation = hatNone 128 | TabOrder = 4 129 | TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoScrollOnExpand, toAutoTristateTracking] 130 | TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toInitOnSave, toToggleOnDblClick] 131 | TreeOptions.PaintOptions = [toShowButtons, toShowRoot, toThemeAware, toUseBlendedImages] 132 | OnChecking = VSTColumnNamesChecking 133 | OnDragAllowed = VSTColumnNamesDragAllowed 134 | OnDragOver = VSTColumnNamesDragOver 135 | OnDragDrop = VSTColumnNamesDragDrop 136 | OnFocusChanging = VSTColumnNamesFocusChanging 137 | OnFreeNode = VSTColumnNamesFreeNode 138 | OnGetText = VSTColumnNamesGetText 139 | OnInitNode = VSTColumnNamesInitNode 140 | Columns = <> 141 | end 142 | object EditPixelWidth: TEdit 143 | Left = 172 144 | Top = 244 145 | Width = 35 146 | Height = 21 147 | Anchors = [akBottom] 148 | TabOrder = 5 149 | OnExit = EditPixelWidthExit 150 | OnKeyPress = EditPixelWidthKeyPress 151 | end 152 | end 153 | -------------------------------------------------------------------------------- /Source/VirtualExplorerTreeExt.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Source/VirtualExplorerTreeExt.res -------------------------------------------------------------------------------- /Source/VirtualThumbnails.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyscripter/MustangpeakVirtualShellTools/f0da1bbc58eb93f6d8b7e2a52e82561ab32cdb1e/Source/VirtualThumbnails.pas -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | MustangpeakVirtualShellTools 2 | ============================ 3 | 4 | ### Table of contents 5 | 1. [Introduction](#Introduction) 6 | 2. [Package names](#Package-names) 7 | 3. [Installation](#Installation) 8 | 9 | ## Introduction 10 | 11 | The Turbopak Mustangpeak library for Delphi and C++Builder was originally developed by **Jim 12 | Kueneman** and contains the EasyListView and the VirutalShellExplorer components. 13 | Mustangpeak VirtualShellTools provides Windows Explorer style shell treeview and list view 14 | components for Delphi and C++Builder applications. The main component TVirtualExplorerTree 15 | is a VirtualStringTree decsendant and is VCL Styles and DPI-aware enabled. 16 | 17 | This is a source-only release of MustangpeakVirtualShellTools. It includes 18 | designtime and runtime packages for Delphi and CBuilder and supports 19 | Win32 and Win64. 20 | 21 | ## Package names 22 | 23 | MustangpeakVirtualShellTools package names have the following form: 24 | 25 | - VirtualShellToolsD.dpk (Delphi runtime package) 26 | - VirtualShellToolsDD.dpk (Delphi design time package) 27 | 28 | - VirtualShellToolsC.bpl (C++Builder Runtime for the VCL) 29 | - VirtualShellToolsCD.bpl (C++Builder Runtime for the VCL) 30 | 31 | *RAD STUDIO Rio or later supported.* 32 | 33 | ## Installation 34 | 35 | To install MustangpeakVirtualShellTools into your IDE, take the following 36 | steps: 37 | 38 | 1. Install first [MustangpeakCommonLib](https://github.com/pyscripter/MustangpeakCommonLib), 39 | [MustangpeakEasyListView](https://github.com/pyscripter/MustangpeakEasyListView) and 40 | [Virtual-TreeView](https://github.com/Virtual-TreeView/Virtual-TreeView). Note that you need to install the Virtual-Treview version from the repo and not the GetIt version. 41 | 42 | 2. Clone or download and unzip the Github repository into a directory (e.g., D:\MustangpeakVirtualShellTools). 43 | 44 | 3. Start RAD Studio. 45 | 46 | 4. Add the source subdirectory (e.g., D:\MustangpeakVirtualShellTools\Source) to the 47 | IDE's library path. 48 | 49 | 5. Open and compile the runtime package specific to the IDE being used. 50 | 51 | 6. Open & install the corresponding designtime package. 52 | 53 | 7. If you have installed Toolbar2000 or SpTBXLib components and want to use them 54 | with VirtualShellTools, enable the respective directives in Include\Addins.inc. 55 | --------------------------------------------------------------------------------