FUNCTION SelDirDlg LPARAMETERS cDialogTitle, cStartingFolder, nBrowseFlags * Select a directory using the default browser dialog IF TYPE('cDialogTitle') # 'C' cDialogTitle = 'Please select a folder:' ENDIF IF TYPE('cStartingFolder') # 'C' cStartingFolder = FULLPATH(CURDIR()) ENDIF IF TYPE('nBrowseFlags') # 'N' * uses BROWSEINFO structure ulFlags values * by default, set BIF_RETURNONLYFSDIRS (1) and BIF_EDITBOX (16) and BIF_VALIDATE (32) * to limit to returning directories, provide an edit box to let user enter a path, * and validate manually-entered paths * * ulFlags values: * BIF_RETURNONLYFSDIRS 1 * BIF_DONTGOBELOWDOMAIN 2 * BIF_STATUSTEXT 4 * BIF_RETURNFSANCESTORS 8 * BIF_EDITBOX 0x10 * BIF_VALIDATE 0x20 * BIF_BROWSEFORCOMPUTER 0x1000 * BIF_BROWSEFORPRINTER 0x2000 * BIF_BROWSEFOREVERYTHING 0x4000 nBrowseFlags = 32 + 16 + 1 ENDIF LOCAL oBrowseObject, cPathToReturn, oShellObj oShellObj = CREATEOBJ('Shell.Application') cPathToReturn = '' * Get a Folder object oBrowseObject = oShellObj.BrowseForFolder(0, ; cDialogTitle, ; nBrowseFlags, ; cStartingFolder) * Before I used the Items collection of the Folder object * to get a path; it doesn't work if the directory is empty. * Instead, spin through the Items collection of the Parent * Folder and locate the item whose name matches the * Title property of the Folder object; return that path FOR EACH item IN oBrowseObject.ParentFolder.Items IF item.name == oBrowseObject.title cPathToReturn = Item.Path EXIT ENDIF ENDFOR RETURN cPathToReturn