36228 Letture

Mostrare la finestra per la scelta di una directory

Avrete certamente notato che molte applicazioni Windows fanno uso di una finestra che permette all'utente di scegliere una cartella - su una qualunque unità collegata - dove, ad esempio, salvare un file.

Per farne uso anche nella vostra applicazione Visual Basic, è sufficiente sfruttare alcune funzioni API.

Il nome della cartella selezionata verrà salvato nella variabile sBuffer.

Option Explicit

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

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

Private Declare Function lstrcat Lib "kernel32" _
Alias "lstrcatA" (ByVal lpString1 As String, ByVal _
lpString2 As String) As Long


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



Private Sub Command1_Click()

'Apre un dialog box che permette di scegliere
'una cartella da una qualunque unità collegata

Dim lpIDList As Long 'Declare Varibles
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BrowseInfo

szTitle = "Scrivere qui il testo da visualizzare nel dialog box."
'Testo che appare nell'area grigia sotto la barra del titolo

With tBrowseInfo
    .hWndOwner = Me.hWnd
    .lpszTitle = lstrcat(szTitle, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)


If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
MsgBox sBuffer
End If

End Sub


Mostrare la finestra per la scelta di una directory - IlSoftware.it