-
PLLLLEEEEEEZZZZ...
I'd like to know how I can have an open dialog show only directories and allow you to open the directories as you would a file.
Or, if not with an open dialog, there is that dialog that shows up commonly to select a directory (ex: WinAmp's Add Dir). Where could I get a control for that? I probably could build it myself, but I'd help a lot to find a control.
Thanks!!
-
Put this in a module and call BrowseForFolder:
Code:
Option Explicit
Private Const MAX_PATH = 260
Public Enum browseInfoFlags
BIF_NONE = 0 ' No Flags
BIF_RETURNONLYFSDIRS = &H1& ' For finding a folder to start document searching
BIF_DONTGOBELOWDOMAIN = &H2& ' For starting the Find Computer
BIF_STATUSTEXT = &H4&
BIF_RETURNFSANCESTORS = &H8&
BIF_EDITBOX = &H10&
BIF_VALIDATE = &H20& ' insist on valid result (or CANCEL)
BIF_BROWSEFORCOMPUTER = &H1000& ' Browsing for Computers.
BIF_BROWSEFORPRINTER = &H2000& ' Browsing for Printers
BIF_BROWSEINCLUDEFILES = &H4000& ' Browsing for Everything
End Enum
Private Type BROWSEINFO
hWndOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As browseInfoFlags
lpfn As Long
lParam As Long
iImage As Long
End Type
' for SHGetPathFromIDList, pszString must be at least MAX_PATH (260) chars
Private Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal ptr As Long)
' BrowseForFolder() returns a path if the user picks a good one, or "" if they don't.
Public Function BrowseForFolder(ByVal hWndOwner As Long, Optional ByVal dlgTitle$ = "Please select a folder.", Optional ByVal flags As browseInfoFlags = BIF_RETURNONLYFSDIRS) As String
Dim bif As BROWSEINFO, pidl As Long, buf$
With bif
.hWndOwner = hWndOwner
.pidlRoot = 0 ' desktawp
.pszDisplayName = Space$(MAX_PATH)
.lpszTitle = dlgTitle$
.ulFlags = flags
.lpfn = 0&
.lParam = 0&
.iImage = 0&
End With
pidl = SHBrowseForFolder(bif)
If (pidl = 0) Then Exit Function
buf$ = Space$(MAX_PATH)
If (SHGetPathFromIDList(pidl, buf$) = 0) Then
buf$ = ""
Else
buf$ = Left$(buf$, InStr(1, buf$, vbNullChar) - 1)
End If
CoTaskMemFree pidl
BrowseForFolder = buf$
End Function
-
Thanks! But, since you picked that method, how can I make it start in... say, app.path?
-
-
I'm sure that wont work Meg, I haven't reserched it so i don't know the answer