Selezionare una Cartella (o un File) con BrowseForFolder
Con BrowseForFolder senza alcun componente esterno, possiamo selezionare qualsiasi cartella o file nel nostro Sistema.
Inserire in un modulo bas:
Option Explicit
Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Public Const BIF_RETURNONLYFSDIRS = &H1& '//
flag per la ricerca per cartelle
Public Const BIF_DONTGOBELOWDOMAIN = &H2& '//
flag per la ricerca per computer
Public Const BIF_BROWSEINCLUDEFILES = &H4000& '//
flag per ricerca anche dei File
Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function BrowseForFolder(ByVal hWndOwner As Long, ByVal sPrompt As String, _
Optional ByVal lFlags As Long = BIF_RETURNONLYFSDIRS) As String
' Visualizza la finestra di dialogo delle cartelle di Windows
' Parametri iniziali:
' hWnd del form
' Titolo della finestra
' Con lFlags si può specificare quello che si potrà selezionare:
' BIF_BROWSEINCLUDEFILES, etc.
' BIF_RETURNONLYFSDIRS
'
Dim iNull As Integer
Dim lpIDList As Long
Dim lResult As Long
Dim sPath As String
Dim udtBI As BrowseInfo
With udtBI
.hWndOwner = hWndOwner
.lpszTitle = lstrcat(sPrompt & vbCrLf, "")
.ulFlags = lFlags
End With
'Mostra la finestra di dialogo di 'BrowseForFolder'
lpIDList = SHBrowseForFolder(udtBI)
If lpIDList Then
'Se si è selezionata una cartella...
sPath = String$(MAX_PATH, 0)
'Ottiene
il percorso dalla IDList
SHGetPathFromIDList lpIDList, sPath
'libera
il blocco di memoria
CoTaskMemFree lpIDList
iNull = InStr(sPath, vbNullChar)
If iNull Then
sPath = Left$(sPath, iNull - 1)
End If
Else
' Se si è premuto annulla...
sPath = ""
End If
BrowseForFolder = sPath
End Function
In un Form inserire:
- un CheckBox dandogli il nome: chkIncludiFile
- un CommandButton dandogli il nome: cmdSelDir
- il seguente codice:
Option Explicit
Private Sub cmdSelDir_Click()
Dim sDir As String
Dim lFlags As Long
lFlags = BIF_RETURNONLYFSDIRS
'Se questo CheckBox è selezionato si vedono anche i File
If chkIncludiFile Then
lFlags = lFlags Or BIF_BROWSEINCLUDEFILES
End If
sDir = BrowseForFolder(Me.hWnd, "Selezionare la cartella", lFlags)
If sDir <> "" Then
MsgBox "Cartella selezionata: " & sDir
Else
MsgBox "Non è stata selezionata alcuna cartella"
End If
End Sub
Testato su: Windows 98, Windows Me, Windows
2000 Professional