|
-
Jun 25th, 2000, 10:10 AM
#1
Thread Starter
Member
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!!
-
Jun 25th, 2000, 10:19 AM
#2
transcendental analytic
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.
-
Jun 26th, 2000, 06:17 AM
#3
Thread Starter
Member
Thanks! But, since you picked that method, how can I make it start in... say, app.path?
-
Jun 26th, 2000, 06:24 AM
#4
-
Jun 26th, 2000, 06:33 AM
#5
transcendental analytic
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|