⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedialog.bas

📁 能处理星际争霸
💻 BAS
字号:
Attribute VB_Name = "FileDialog"
Option Explicit

Public NullPtr As String

Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    Filter As String
    CustomFilter As String
    nMaxCustFilter As Long
    FilterIndex As Long
    FileName As String
    MaxFileSize As Long
    FileTitle As String
    MaxFileTitleSize As Long
    InitDir As String
    DialogTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    DefaultExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Type BROWSEINFO
    hwndOwner As Long
    pidlRoot As Long
    DisplayName As String
    Title As String
    Flags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Declare Function CommDlgExtendedError Lib "Comdlg32.dll" () As Long
Declare Function GetOpenFileName Lib "Comdlg32.dll" _
    Alias "GetOpenFileNameA" (lpofn As OPENFILENAME) As Boolean
Declare Function GetSaveFileName Lib "Comdlg32.dll" _
    Alias "GetSaveFileNameA" (lpofn As OPENFILENAME) As Boolean
Declare Function SHBrowseForFolder Lib "Shell32.dll" _
    (lpbi As BROWSEINFO) As Long
Declare Function SHGetPathFromIDList Lib "Shell32.dll" ( _
    pidl As Long, _
    ByRef pszPath As Byte) As Boolean

Public Const OFN_READONLY             As Long = &H1
Public Const OFN_OVERWRITEPROMPT      As Long = &H2
Public Const OFN_HIDEREADONLY         As Long = &H4
Public Const OFN_NOCHANGEDIR          As Long = &H8
Public Const OFN_SHOWHELP             As Long = &H10
Public Const OFN_ENABLEHOOK           As Long = &H20
Public Const OFN_ENABLETEMPLATE       As Long = &H40
Public Const OFN_ENABLETEMPLATEHANDLE As Long = &H80
Public Const OFN_NOVALIDATE           As Long = &H100
Public Const OFN_ALLOWMULTISELECT     As Long = &H200
Public Const OFN_EXTENSIONDIFFERENT   As Long = &H400
Public Const OFN_PATHMUSTEXIST        As Long = &H800
Public Const OFN_FILEMUSTEXIST        As Long = &H1000
Public Const OFN_CREATEPROMPT         As Long = &H2000
Public Const OFN_SHAREAWARE           As Long = &H4000
Public Const OFN_NOREADONLYRETURN     As Long = &H8000
Public Const OFN_NOTESTFILECREATE     As Long = &H10000
Public Const OFN_NONETWORKBUTTON      As Long = &H20000
Public Const OFN_NOLONGNAMES          As Long = &H40000        ' force no long names for 4.x modules
Public Const OFN_EXPLORER             As Long = &H80000        ' new look commdlg
Public Const OFN_NODEREFERENCELINKS   As Long = &H100000
Public Const OFN_LONGNAMES            As Long = &H200000       ' force long names for 3.x modules
Public Const OFN_ENABLEINCLUDENOTIFY  As Long = &H400000       ' send include message to callback
Public Const OFN_ENABLESIZING         As Long = &H800000

Public Const BIF_RETURNONLYFSDIRS   As Long = &H1     ' For finding a folder to start document searching
Public Const BIF_DONTGOBELOWDOMAIN  As Long = &H2     ' For starting the Find Computer
Public Const BIF_STATUSTEXT         As Long = &H4
Public Const BIF_RETURNFSANCESTORS  As Long = &H8
Public Const BIF_EDITBOX            As Long = &H10
Public Const BIF_VALIDATE           As Long = &H20    ' insist on valid result (or CANCEL)

Public Const BIF_BROWSEFORCOMPUTER  As Long = &H1000  ' Browsing for Computers.
Public Const BIF_BROWSEFORPRINTER   As Long = &H2000  ' Browsing for Printers
Public Const BIF_BROWSEINCLUDEFILES As Long = &H4000  ' Browsing for Everything

Function GetPathFromID(ByVal dwID As Long) As String
Dim buffer(1 To 260) As Byte
GetPathFromID = NullPtr
If SHGetPathFromIDList(ByVal dwID, buffer(1)) Then
    GetPathFromID = StrConv(buffer, vbUnicode)
    StripNull GetPathFromID
End If
End Function
Sub ReplaceChar(ByRef TextStr As String, ByVal Char As String, ByVal NewChar As String)
If Len(Char) > 1 Then Char = Left$(Char, 1)
If Len(NewChar) > 1 Then NewChar = Left$(NewChar, 1)
Dim cNum As Long, cNum2 As Long
For cNum = 1 To Len(TextStr)
    cNum2 = InStr(cNum, TextStr, Char)
    If cNum2 Then
        cNum = cNum2
        Mid$(TextStr, cNum, 1) = NewChar
    Else
        Exit Sub
    End If
Next cNum
End Sub
Sub StripNull(ByRef TextStr As String)
Dim cNum As Long
cNum = InStr(1, TextStr, Chr$(0))
If cNum Then
    TextStr = Left(TextStr, cNum - 1)
End If
End Sub
Sub StripNullMulti(ByRef TextStr As String)
Dim cNum As Long, cNum2 As Long
For cNum = 1 To Len(TextStr)
    cNum2 = InStr(cNum, TextStr, Chr$(0))
    If cNum2 Then
        cNum = cNum2
        cNum2 = InStr(cNum + 1, TextStr, Chr$(0))
        If cNum + 1 = cNum2 Or cNum2 = 0 Then
            TextStr = Left(TextStr, cNum - 1)
            Exit Sub
        End If
    Else
        Exit Sub
    End If
Next cNum
End Sub
Sub InitFileDialog(ByRef lpFileDialog As OPENFILENAME)
lpFileDialog.lStructSize = Len(lpFileDialog)
lpFileDialog.hwndOwner = 0
lpFileDialog.hInstance = 0
lpFileDialog.Filter = NullPtr
lpFileDialog.CustomFilter = NullPtr
lpFileDialog.nMaxCustFilter = 0
lpFileDialog.FilterIndex = 0
lpFileDialog.FileName = NullPtr
lpFileDialog.MaxFileSize = 260
lpFileDialog.FileTitle = NullPtr
lpFileDialog.MaxFileTitleSize = 260
lpFileDialog.InitDir = NullPtr
lpFileDialog.DialogTitle = NullPtr
lpFileDialog.Flags = 0
lpFileDialog.nFileOffset = 0
lpFileDialog.nFileExtension = 0
lpFileDialog.DefaultExt = NullPtr
lpFileDialog.lCustData = 0
lpFileDialog.lpfnHook = 0
lpFileDialog.lpTemplateName = NullPtr
End Sub
Sub InitFolderDialog(ByRef lpFolderDialog As BROWSEINFO)
lpFolderDialog.hwndOwner = 0
lpFolderDialog.pidlRoot = 0
lpFolderDialog.DisplayName = NullPtr
lpFolderDialog.Title = NullPtr
lpFolderDialog.Flags = 0
lpFolderDialog.lpfn = 0
lpFolderDialog.lParam = 0
lpFolderDialog.iImage = 0
End Sub
Function ShowOpen(ByRef lpFileDialog As OPENFILENAME) As Boolean
lpFileDialog.lStructSize = Len(lpFileDialog)
ReplaceChar lpFileDialog.Filter, "|", Chr$(0)
lpFileDialog.Filter = lpFileDialog.Filter + Chr$(0)
If Len(lpFileDialog.FileName) <= lpFileDialog.MaxFileSize Then _
    lpFileDialog.FileName = lpFileDialog.FileName + String$(lpFileDialog.MaxFileSize - Len(lpFileDialog.FileName), Chr$(0))
If Len(lpFileDialog.FileTitle) <= lpFileDialog.MaxFileTitleSize Then _
    lpFileDialog.FileTitle = lpFileDialog.FileTitle + String$(lpFileDialog.MaxFileTitleSize - Len(lpFileDialog.FileTitle), Chr$(0))
ShowOpen = GetOpenFileName(lpFileDialog)
lpFileDialog.Filter = Left$(lpFileDialog.Filter, Len(lpFileDialog.Filter) - 1)
ReplaceChar lpFileDialog.Filter, Chr$(0), "|"
If lpFileDialog.Flags And (OFN_ALLOWMULTISELECT Or OFN_EXPLORER) Then
    StripNullMulti lpFileDialog.FileName
    StripNullMulti lpFileDialog.FileTitle
Else
    StripNull lpFileDialog.FileName
    StripNull lpFileDialog.FileTitle
End If
End Function
Function ShowSave(ByRef lpFileDialog As OPENFILENAME) As Boolean
lpFileDialog.lStructSize = Len(lpFileDialog)
ReplaceChar lpFileDialog.Filter, "|", Chr$(0)
lpFileDialog.Filter = lpFileDialog.Filter + Chr$(0)
If Len(lpFileDialog.FileName) <= lpFileDialog.MaxFileSize Then _
    lpFileDialog.FileName = lpFileDialog.FileName + String$(lpFileDialog.MaxFileSize - Len(lpFileDialog.FileName), Chr$(0))
If Len(lpFileDialog.FileTitle) <= lpFileDialog.MaxFileTitleSize Then _
    lpFileDialog.FileTitle = lpFileDialog.FileTitle + String$(lpFileDialog.MaxFileTitleSize - Len(lpFileDialog.FileTitle), Chr$(0))
ShowSave = GetSaveFileName(lpFileDialog)
lpFileDialog.Filter = Left$(lpFileDialog.Filter, Len(lpFileDialog.Filter) - 1)
ReplaceChar lpFileDialog.Filter, Chr$(0), "|"
StripNull lpFileDialog.FileName
StripNull lpFileDialog.FileTitle
End Function
Function ShowFolder(ByRef lpFolderDialog As BROWSEINFO) As Long
If Len(lpFolderDialog.DisplayName) <= 260 Then _
    lpFolderDialog.DisplayName = lpFolderDialog.DisplayName + String$(260 - Len(lpFolderDialog.DisplayName), Chr$(0))
ShowFolder = SHBrowseForFolder(lpFolderDialog)
StripNull lpFolderDialog.DisplayName
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -