2,506
社区成员
发帖
与我相关
我的任务
分享' 调用示例:
Option Explicit
Private Sub Command1_Click()
Dim strTemp As String
If (0& = ShowOpen(0, strTemp, , "文本文件(*.txt)|*.txt,所有文件(*.*)|*.*")) Then
MsgBox strTemp, 64
Else
MsgBox "取消操作。", 64
End If
End Sub
Private Sub Command2_Click()
Dim strTemp As String
If (0& = ShowSave(0, strTemp, , "文本文件(*.txt)|*.txt,所有文件(*.*)|*.*")) Then
MsgBox strTemp, 64
Else
MsgBox "取消操作。", 64
End If
End Sub
' 接口函数代码
Option Explicit
Private Declare Function GetOpenFileName _
Lib "Comdlg32" Alias "GetOpenFileNameW" _
(pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName _
Lib "Comdlg32" Alias "GetSaveFileNameW" _
(pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hWndOwner As Long
hInstance As Long
lpstrFilter As Long
lpstrCustFilter As Long
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As Long
nMaxFile As Long
lpstrFileTitle As Long
nMaxFileTitle As Long
lpstrInitialDir As Long
lpstrTitle As Long
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Private Const OFN_READONLY As Long = &H1 '只读打开为选中
Private Const OFN_HIDEREADONLY As Long = &H4 '隐藏只读打开
Private Const OFN_OVERWRITEPROMPT As Long = &H2 '覆盖时提示
Private Const OFN_ALLOWMULTISELECT As Long = &H200 '多个选中
Private Const OFN_EXPLORER As Long = &H80000 '资源管理器
Private arrCustData(15) As Long
Private mlInitFlag As Long
Public Function ShowOpen(ByVal hWndOwner As Long, FileOpen As String, _
Optional Title As String = "打开文件:", _
Optional Filter As String = "所有文件(*.*)|*.*", _
Optional FilterIndex As Long = 1&, _
Optional StartDir As String = vbNullChar, _
Optional Flags As Long = OFN_HIDEREADONLY) As Long
Dim OpenFN As OPENFILENAME
Dim strFilt As String
Dim strName As String
Dim strDir As String
Dim p&
strName = String$(256&, 0)
strDir = strName
'strFilt = "所有文件(*.*)|*.*,文本文件(*.txt)|*.txt" & vbNullChar & vbNullChar
strFilt = Replace(Replace(Filter & vbNullChar, "|", vbNullChar), ",", vbNullChar)
'OpenFN.lStructSize = Len(OpenFN)
OpenFN.lStructSize = 76&
OpenFN.hWndOwner = hWndOwner
'OpenFN.hInstance = App.hInstance
OpenFN.hInstance = 0&
OpenFN.lpstrTitle = StrPtr(Title)
OpenFN.lpstrFilter = StrPtr(strFilt)
OpenFN.nFilterIndex = FilterIndex
OpenFN.lpstrInitialDir = StrPtr(StartDir)
OpenFN.lpstrFile = StrPtr(strName)
OpenFN.nMaxFile = 255
OpenFN.lpstrFileTitle = StrPtr(strDir)
OpenFN.nMaxFileTitle = 255
OpenFN.Flags = Flags
If (GetOpenFileName(OpenFN)) Then
p = InStr(1&, strName, vbNullChar)
FileOpen = Left$(strName, (p - 1&) And (p > 0&))
ShowOpen = 0&
Else
ShowOpen = -1&
End If
End Function
Public Function ShowSave(ByVal hWndOwner As Long, FileSave As String, _
Optional Title As String = "保存文件:", _
Optional Filter As String = vbNullChar & vbNullChar, _
Optional FilterIndex As Long = 0, _
Optional StartDir As String = vbNullChar, _
Optional Flags As Long = OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT) As Long
Dim SaveFN As OPENFILENAME
Dim strFilt As String
Dim strName As String
Dim strTemp As String
Dim p As Long
strName = String$(264&, 0)
strTemp = strName
strFilt = Replace(Replace(Filter & vbNullChar, "|", vbNullChar), ",", vbNullChar)
SaveFN.lStructSize = 76&
SaveFN.hWndOwner = hWndOwner
'SaveFN.hInstance = App.hInstance
SaveFN.hInstance = 0&
SaveFN.lpstrTitle = StrPtr(Title)
SaveFN.lpstrFilter = StrPtr(strFilt)
SaveFN.nFilterIndex = 0&
SaveFN.lpstrInitialDir = StrPtr(StartDir)
SaveFN.lpstrFile = StrPtr(strName)
SaveFN.nMaxFile = 256&
SaveFN.lpstrFileTitle = StrPtr(strTemp)
SaveFN.nMaxFileTitle = 256&
SaveFN.Flags = Flags
If GetSaveFileName(SaveFN) Then
p = InStr(1&, strName, vbNullChar)
FileSave = Left$(strName, (p - 1&) And (p > 0&))
ShowSave = 0&
Else
ShowSave = -1&
End If
End Function
这个已经不再支持 可以使用API