Results 1 to 5 of 5

Thread: Open Dialog

  1. #1

    Thread Starter
    Member
    Join Date
    May 1999
    Location
    San Jose, CA, USA
    Posts
    43

    Question

    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!!
    -_=Progrium=_-
    Progrium Software

    Using: VB 6 Pro

  2. #2
    transcendental analytic kedaman's Avatar
    Join Date
    Mar 2000
    Location
    0x002F2EA8
    Posts
    7,221
    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
    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.

  3. #3

    Thread Starter
    Member
    Join Date
    May 1999
    Location
    San Jose, CA, USA
    Posts
    43

    Question

    Thanks! But, since you picked that method, how can I make it start in... say, app.path?
    -_=Progrium=_-
    Progrium Software

    Using: VB 6 Pro

  4. #4
    Guest
    Use the ChDir Command

    Code:
    ChDir App.Path

  5. #5
    transcendental analytic kedaman's Avatar
    Join Date
    Mar 2000
    Location
    0x002F2EA8
    Posts
    7,221
    I'm sure that wont work Meg, I haven't reserched it so i don't know the answer
    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.

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