Results 1 to 3 of 3

Thread: Common Dialog problems

  1. #1

    Thread Starter
    New Member
    Join Date
    May 2000
    Posts
    1

    Question

    I want to set the filter so that you can only select a folder, not a specific type of file. I was wondering how I would do this because I can't set the CommonDialog1.Filter property to a directory.
    Please HelpMe.

    Thanks.

  2. #2
    transcendental analytic kedaman's Avatar
    Join Date
    Mar 2000
    Location
    0x002F2EA8
    Posts
    7,221

    Try this, I think it's cheaters way but it works

    Directories|Directories
    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
    Lively Member
    Join Date
    Apr 2000
    Location
    Hell
    Posts
    89
    Funny you should ask that question, I just saw a tutorial on that the other day http://www.thescarms.com/ Mad props to whoever wrote it. It used SHBrowseForFolder, SHGetPathFromIDList, and CoTaskMemFree.

    I didnt actually read any of it, just saw the three functions mentioned and drew my own conclusions.

    For the sake of simplicity, I used those three functions. If you want to see something really complicated, though, just ask me and I'll modify it to use all-out shell namespace OLE

    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
    Usage:

    Path$ = BrowseForFolder(Me.hWnd)


    - Steve

    Real programmers use COPY CON PROGRAM.EXE

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