GetOpenFileName - два фильтра - VB
Формулировка задачи:
Использую api GetOpenFileName для вызова диалога выбора файла
Как сделать один фильтр по двум расширениям? (*.GIF *.7z)
Еще вопрос: есть ли подобный диалог выбора католога, а не файла
Сейчас использую SHBrowseForFolder, что не очень удобно в плане использования юзером
Решение задачи: «GetOpenFileName - два фильтра»
textual
Листинг программы
- Option Explicit
- Private Type BrowseInfo
- hWndOwner As Long
- pIDLRoot As Long
- pszDisplayName As Long
- lpszTitle As Long
- ulFlags As Long
- lpfnCallback As Long
- lParam As Long
- iImage As Long
- End Type
- Private Enum WhatBrowse
- BIF_RETURNONLYFSDIRS = &H1
- BIF_BROWSEINCLUDEFILES = &H1 Or &H4000
- BIF_BROWSEFORCOMPUTER = &H1000
- BIF_BROWSEFORPRINTER = &H2000
- End Enum
- Private Const MAX_PATH = 260
- Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
- Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
- Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
- Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
- Public Function fBrowseForFolder(hWndOwner As Long, sPrompt As String, WhatBr) As String
- Dim iNull As Integer
- Dim lpIDList As Long
- Dim lResult As Long
- Dim sPath As String
- Dim udtBI As BrowseInfo
- With udtBI
- .hWndOwner = hWndOwner
- .lpszTitle = lstrcat(sPrompt, "")
- .ulFlags = WhatBr
- End With
- lpIDList = SHBrowseForFolder(udtBI)
- If lpIDList Then
- sPath = String$(MAX_PATH, 0)
- lResult = SHGetPathFromIDList(lpIDList, sPath)
- Call CoTaskMemFree(lpIDList)
- iNull = InStr(sPath, vbNullChar)
- If iNull Then sPath = Left$(sPath, iNull - 1)
- End If
- fBrowseForFolder = sPath
- End Function
- Private Sub Command1_Click()
- Dim sStr As String
- Dim hWnd As Long
- 'BIF-константы можно комбинировать, так же можно и файл выбирать или принтер
- sStr = fBrowseForFolder(hWnd, "Выберите папку!",BIF_RETURNONLYFSDIRS)
- MsgBox sStr
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д