Current News
Archived News
Search News
Discussion Forum


Old Forum
Install Programs More Downloads...
Troubleshooting
Source Code
Format Specs.
Misc. Information
Non-SF Stuff
Links




CommitLineData
0d212c7b 1Attribute VB_Name = "FileDialog"
2Option Explicit
3
4Public NullPtr As String
5
6Type OPENFILENAME
7 lStructSize As Long
8 hwndOwner As Long
9 hInstance As Long
10 Filter As String
11 CustomFilter As String
12 nMaxCustFilter As Long
13 FilterIndex As Long
14 FileName As String
15 MaxFileSize As Long
16 FileTitle As String
17 MaxFileTitleSize As Long
18 InitDir As String
19 DialogTitle As String
20 Flags As Long
21 nFileOffset As Integer
22 nFileExtension As Integer
23 DefaultExt As String
24 lCustData As Long
25 lpfnHook As Long
26 lpTemplateName As String
27End Type
28
29Type BROWSEINFO
30 hwndOwner As Long
31 pidlRoot As Long
32 DisplayName As String
33 Title As String
34 Flags As Long
35 lpfn As Long
36 lParam As Long
37 iImage As Long
38End Type
39
40Declare Function CommDlgExtendedError Lib "Comdlg32.dll" () As Long
41Declare Function GetOpenFileName Lib "Comdlg32.dll" _
42 Alias "GetOpenFileNameA" (lpofn As OPENFILENAME) As Boolean
43Declare Function GetSaveFileName Lib "Comdlg32.dll" _
44 Alias "GetSaveFileNameA" (lpofn As OPENFILENAME) As Boolean
45Declare Function SHBrowseForFolder Lib "Shell32.dll" _
46 (lpbi As BROWSEINFO) As Long
47Declare Function SHGetPathFromIDList Lib "Shell32.dll" ( _
48 pidl As Long, _
49 ByRef pszPath As Byte) As Boolean
50
51Public Const OFN_READONLY As Long = &H1
52Public Const OFN_OVERWRITEPROMPT As Long = &H2
53Public Const OFN_HIDEREADONLY As Long = &H4
54Public Const OFN_NOCHANGEDIR As Long = &H8
55Public Const OFN_SHOWHELP As Long = &H10
56Public Const OFN_ENABLEHOOK As Long = &H20
57Public Const OFN_ENABLETEMPLATE As Long = &H40
58Public Const OFN_ENABLETEMPLATEHANDLE As Long = &H80
59Public Const OFN_NOVALIDATE As Long = &H100
60Public Const OFN_ALLOWMULTISELECT As Long = &H200
61Public Const OFN_EXTENSIONDIFFERENT As Long = &H400
62Public Const OFN_PATHMUSTEXIST As Long = &H800
63Public Const OFN_FILEMUSTEXIST As Long = &H1000
64Public Const OFN_CREATEPROMPT As Long = &H2000
65Public Const OFN_SHAREAWARE As Long = &H4000
66Public Const OFN_NOREADONLYRETURN As Long = &H8000
67Public Const OFN_NOTESTFILECREATE As Long = &H10000
68Public Const OFN_NONETWORKBUTTON As Long = &H20000
69Public Const OFN_NOLONGNAMES As Long = &H40000 ' force no long names for 4.x modules
70Public Const OFN_EXPLORER As Long = &H80000 ' new look commdlg
71Public Const OFN_NODEREFERENCELINKS As Long = &H100000
72Public Const OFN_LONGNAMES As Long = &H200000 ' force long names for 3.x modules
73Public Const OFN_ENABLEINCLUDENOTIFY As Long = &H400000 ' send include message to callback
74Public Const OFN_ENABLESIZING As Long = &H800000
75
76Public Const BIF_RETURNONLYFSDIRS As Long = &H1 ' For finding a folder to start document searching
77Public Const BIF_DONTGOBELOWDOMAIN As Long = &H2 ' For starting the Find Computer
78Public Const BIF_STATUSTEXT As Long = &H4
79Public Const BIF_RETURNFSANCESTORS As Long = &H8
80Public Const BIF_EDITBOX As Long = &H10
81Public Const BIF_VALIDATE As Long = &H20 ' insist on valid result (or CANCEL)
82
83Public Const BIF_BROWSEFORCOMPUTER As Long = &H1000 ' Browsing for Computers.
84Public Const BIF_BROWSEFORPRINTER As Long = &H2000 ' Browsing for Printers
85Public Const BIF_BROWSEINCLUDEFILES As Long = &H4000 ' Browsing for Everything
86
87Function GetPathFromID(ByVal dwID As Long) As String
88Dim buffer(1 To 260) As Byte
89GetPathFromID = NullPtr
90If SHGetPathFromIDList(ByVal dwID, buffer(1)) Then
91 GetPathFromID = StrConv(buffer, vbUnicode)
92 StripNull GetPathFromID
93End If
94End Function
95Sub ReplaceChar(ByRef TextStr As String, ByVal Char As String, ByVal NewChar As String)
96If Len(Char) > 1 Then Char = Left$(Char, 1)
97If Len(NewChar) > 1 Then NewChar = Left$(NewChar, 1)
98Dim cNum As Long, cNum2 As Long
99For cNum = 1 To Len(TextStr)
100 cNum2 = InStr(cNum, TextStr, Char)
101 If cNum2 Then
102 cNum = cNum2
103 Mid$(TextStr, cNum, 1) = NewChar
104 Else
105 Exit Sub
106 End If
107Next cNum
108End Sub
109Sub StripNull(ByRef TextStr As String)
62046253 110Dim cNum As Long
111cNum = InStr(1, TextStr, Chr$(0))
112If cNum Then
113 TextStr = Left(TextStr, cNum - 1)
114End If
115End Sub
116Sub StripNullMulti(ByRef TextStr As String)
0d212c7b 117Dim cNum As Long, cNum2 As Long
118For cNum = 1 To Len(TextStr)
119 cNum2 = InStr(cNum, TextStr, Chr$(0))
120 If cNum2 Then
121 cNum = cNum2
122 cNum2 = InStr(cNum + 1, TextStr, Chr$(0))
123 If cNum + 1 = cNum2 Or cNum2 = 0 Then
124 TextStr = Left(TextStr, cNum - 1)
125 Exit Sub
126 End If
127 Else
128 Exit Sub
129 End If
130Next cNum
131End Sub
132Sub InitFileDialog(ByRef lpFileDialog As OPENFILENAME)
133lpFileDialog.lStructSize = Len(lpFileDialog)
134lpFileDialog.hwndOwner = 0
135lpFileDialog.hInstance = 0
136lpFileDialog.Filter = NullPtr
137lpFileDialog.CustomFilter = NullPtr
138lpFileDialog.nMaxCustFilter = 0
139lpFileDialog.FilterIndex = 0
140lpFileDialog.FileName = NullPtr
141lpFileDialog.MaxFileSize = 260
142lpFileDialog.FileTitle = NullPtr
143lpFileDialog.MaxFileTitleSize = 260
144lpFileDialog.InitDir = NullPtr
145lpFileDialog.DialogTitle = NullPtr
146lpFileDialog.Flags = 0
147lpFileDialog.nFileOffset = 0
148lpFileDialog.nFileExtension = 0
149lpFileDialog.DefaultExt = NullPtr
150lpFileDialog.lCustData = 0
151lpFileDialog.lpfnHook = 0
152lpFileDialog.lpTemplateName = NullPtr
153End Sub
154Sub InitFolderDialog(ByRef lpFolderDialog As BROWSEINFO)
155lpFolderDialog.hwndOwner = 0
156lpFolderDialog.pidlRoot = 0
157lpFolderDialog.DisplayName = NullPtr
158lpFolderDialog.Title = NullPtr
159lpFolderDialog.Flags = 0
160lpFolderDialog.lpfn = 0
161lpFolderDialog.lParam = 0
162lpFolderDialog.iImage = 0
163End Sub
164Function ShowOpen(ByRef lpFileDialog As OPENFILENAME) As Boolean
165lpFileDialog.lStructSize = Len(lpFileDialog)
166ReplaceChar lpFileDialog.Filter, "|", Chr$(0)
167lpFileDialog.Filter = lpFileDialog.Filter + Chr$(0)
168If Len(lpFileDialog.FileName) <= lpFileDialog.MaxFileSize Then _
169 lpFileDialog.FileName = lpFileDialog.FileName + String$(lpFileDialog.MaxFileSize - Len(lpFileDialog.FileName), Chr$(0))
170If Len(lpFileDialog.FileTitle) <= lpFileDialog.MaxFileTitleSize Then _
171 lpFileDialog.FileTitle = lpFileDialog.FileTitle + String$(lpFileDialog.MaxFileTitleSize - Len(lpFileDialog.FileTitle), Chr$(0))
172ShowOpen = GetOpenFileName(lpFileDialog)
173lpFileDialog.Filter = Left$(lpFileDialog.Filter, Len(lpFileDialog.Filter) - 1)
174ReplaceChar lpFileDialog.Filter, Chr$(0), "|"
62046253 175If lpFileDialog.Flags And (OFN_ALLOWMULTISELECT Or OFN_EXPLORER) Then
176 StripNullMulti lpFileDialog.FileName
177 StripNullMulti lpFileDialog.FileTitle
178Else
179 StripNull lpFileDialog.FileName
180 StripNull lpFileDialog.FileTitle
181End If
0d212c7b 182End Function
183Function ShowSave(ByRef lpFileDialog As OPENFILENAME) As Boolean
184lpFileDialog.lStructSize = Len(lpFileDialog)
185ReplaceChar lpFileDialog.Filter, "|", Chr$(0)
186lpFileDialog.Filter = lpFileDialog.Filter + Chr$(0)
187If Len(lpFileDialog.FileName) <= lpFileDialog.MaxFileSize Then _
188 lpFileDialog.FileName = lpFileDialog.FileName + String$(lpFileDialog.MaxFileSize - Len(lpFileDialog.FileName), Chr$(0))
189If Len(lpFileDialog.FileTitle) <= lpFileDialog.MaxFileTitleSize Then _
190 lpFileDialog.FileTitle = lpFileDialog.FileTitle + String$(lpFileDialog.MaxFileTitleSize - Len(lpFileDialog.FileTitle), Chr$(0))
191ShowSave = GetSaveFileName(lpFileDialog)
192lpFileDialog.Filter = Left$(lpFileDialog.Filter, Len(lpFileDialog.Filter) - 1)
193ReplaceChar lpFileDialog.Filter, Chr$(0), "|"
194StripNull lpFileDialog.FileName
195StripNull lpFileDialog.FileTitle
196End Function
197Function ShowFolder(ByRef lpFolderDialog As BROWSEINFO) As Long
198If Len(lpFolderDialog.DisplayName) <= 260 Then _
199 lpFolderDialog.DisplayName = lpFolderDialog.DisplayName + String$(260 - Len(lpFolderDialog.DisplayName), Chr$(0))
200ShowFolder = SHBrowseForFolder(lpFolderDialog)
201StripNull lpFolderDialog.DisplayName
202End Function