Results 1 to 4 of 4

Thread: WITH Common Dialog

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Sep 1999
    Location
    Phoenix, az
    Posts
    1,517
    I want to pick a folder
    with command dialog.
    Not a FILE. How do you
    do that?

  2. #2
    Guest
    Code:
    Public 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 = 1 
    Public Const MAX_PATH = 260 
    
    Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long) 
    Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long 
    Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long 
    Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long 
    
    
    Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
         
        'declare variables to be used
         Dim iNull As Integer
         Dim lpIDList As Long
         Dim lResult As Long
         Dim sPath As String
         Dim udtBI As BrowseInfo
    
        'initialise variables
         With udtBI
            .hwndOwner = hwndOwner
            .lpszTitle = lstrcat(sPrompt, "")
            .ulFlags = BIF_RETURNONLYFSDIRS
         End With
    
        'Call the browse for folder API
         lpIDList = SHBrowseForFolder(udtBI)
         
        'get the resulting string path
         If lpIDList Then
            sPath = String$(MAX_PATH, 0)
            lResult = SHGetPathFromIDList(lpIDList, sPath)
            Call CoTaskMemFree(lpIDList)
            iNull = InStr(sPath, vbNullChar)
            If iNull Then sPath = Left$(sPath, iNull - 1)
         End If
    
        'If cancel was pressed, sPath = ""
         BrowseForFolder = sPath
    
    End Function
    
    
    
    Private Sub Command1_Click() 
    Dim strResFolder As String 
    strResFolder = BrowseForFolder(hWnd, "Please select a folder.") 
    If strResFolder = "" Then 
    Call MsgBox("The Cancel button was pressed.", vbExclamation) 
    Else 
    Call MsgBox("The folder " & strResFolder & " was selected.", vbExclamation) 
    End If 
    End Sub

  3. #3
    transcendental analytic kedaman's Avatar
    Join Date
    Mar 2000
    Location
    0x002F2EA8
    Posts
    7,221
    You can't, but you can use this piece of code:
    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
    Use
    writing software in C++ is like driving rivets into steel beam with a toothpick.
    writing haskell makes your life easier:
    reverse (p (6*9)) where p x|x==0=""|True=chr (48+z): p y where (y,z)=divMod x 13
    To throw away OOP for low level languages is myopia, to keep OOP is hyperopia. To throw away OOP for a high level language is insight.

  4. #4

    Thread Starter
    Frenzied Member
    Join Date
    Sep 1999
    Location
    Phoenix, az
    Posts
    1,517
    Matthew you are awsome!
    Thanks Alot!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width