Newsgroup: it.comp.lang.visual-basic
Titolo: Come far selezionare una directory

Salve,
mi spiego meglio, voglio che l'utente possa selezionare una cartella che
risieda sul pc o anche su un pc in rete e che venga restituito il percorso.
Per esempio in un form l'utente deve vedere in una combo le unità
disponibili compreso le risorse di rete e cliccando sull'unità che gli serve
visualizza le cartelle dell'unità e ne seleziona una, clicca su Ok e in una
textbox si trova la path.
Purtoppo il controllo dirlistbox non visualizza le risorse di rete ma solo
le unità locali, a me servirebbe qualcosa tipo le commondialog che
visualizza tutto ma che non mi faccia aprire ne salvare. quali api posso
usare?
Spero di essermi spiegato bene
Grazie
Vincenzo

 wrote in message
9gqihe$5vj$1...@nreadA.inwind.it...

Io lo faccio cosi' (un po' lungo):
-----------------------------------------cut--------------------------------
----------
'===========================================================================
==========
' Usage:
'
'    Dim folder As String
'    folder = BrowseForFolder(Me, "Select A Directory",
"C:\startdir\anywhere")
'    If Len(folder) = 0 Then Exit Sub  'User Selected Cancel
'
'===========================================================================
==========
Option Explicit
Private Const BIF_STATUSTEXT = &H4&
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260
Private Const WM_USER = &H400
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSELECTION = (WM_USER + 102)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
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
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 m_CurrentDirectory As String   'The current directory
Private Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long,
ByVal lp As Long, ByVal pData As Long) As Long
  Dim lpIDList As Long
  Dim ret As Long
  Dim sBuffer As String
  On Error Resume Next  'Sugested by MS to prevent an error from
                        'propagating back into the calling process.
  Select Case uMsg
    Case BFFM_INITIALIZED
      Call SendMessage(hWnd, BFFM_SETSELECTION, 1, m_CurrentDirectory)
    Case BFFM_SELCHANGED
      sBuffer = Space(MAX_PATH)
      ret = SHGetPathFromIDList(lp, sBuffer)
      If ret = 1 Then
        Call SendMessage(hWnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
      End If
  End Select
  BrowseCallbackProc = 0
End Function
Public Function BrowseForFolder(owner As Form, Title As String, StartDir As
String) As String
  'Opens a Treeview control that displays the directories in a computer
  Dim lpIDList As Long
  Dim szTitle As String
  Dim sBuffer As String
  Dim tBrowseInfo As BrowseInfo
  m_CurrentDirectory = StartDir & vbNullChar
  szTitle = Title
  With tBrowseInfo
    .hWndOwner = owner.hWnd
    .lpszTitle = lstrcat(szTitle, "")
'    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN +
BIF_STATUSTEXT
    .ulFlags = 0
    .lpfnCallback = GetAddressofFunction(AddressOf BrowseCallbackProc)  'get
address of function.
  End With
  lpIDList = SHBrowseForFolder(tBrowseInfo)
  If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    BrowseForFolder = sBuffer
  Else
    BrowseForFolder = ""
  End If
End Function
' This function allows you to assign a function pointer to a vaiable.
Private Function GetAddressofFunction(add As Long) As Long
  GetAddressofFunction = add
End Function
-----------------------------------------cut--------------------------------
----------
poi richiami la funzione cosi':
Private Sub Command1_Click()
    Dim GetDir As String
    GetDir = BrowseForFolder(Me, "Seleziona una cartella", App.Path)
    If Len(GetDir) = 0 Then Exit Sub  'user selected cancel
    Text1.Text = GetDir
End Sub
CIAO!

ho dimenticato di dirti che il codice (tra ---cut---) deve stare su
un modulo .bas
CIAO!