|
-
May 6th, 2000, 12:44 AM
#1
Thread Starter
New Member
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.
-
May 6th, 2000, 04:06 AM
#2
transcendental analytic
Try this, I think it's cheaters way but it works
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.
-
May 8th, 2000, 01:22 AM
#3
Lively Member
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|