GetOpenFileName - два фильтра - VB

Узнай цену своей работы

Формулировка задачи:

Использую api GetOpenFileName для вызова диалога выбора файла Как сделать один фильтр по двум расширениям? (*.GIF *.7z) Еще вопрос: есть ли подобный диалог выбора католога, а не файла Сейчас использую SHBrowseForFolder, что не очень удобно в плане использования юзером

Решение задачи: «GetOpenFileName - два фильтра»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type BrowseInfo
  4. hWndOwner As Long
  5. pIDLRoot As Long
  6. pszDisplayName As Long
  7. lpszTitle As Long
  8. ulFlags As Long
  9. lpfnCallback As Long
  10. lParam As Long
  11. iImage As Long
  12. End Type
  13.  
  14. Private Enum WhatBrowse
  15. BIF_RETURNONLYFSDIRS = &H1
  16. BIF_BROWSEINCLUDEFILES = &H1 Or &H4000
  17. BIF_BROWSEFORCOMPUTER = &H1000
  18. BIF_BROWSEFORPRINTER = &H2000
  19. End Enum
  20.  
  21. Private Const MAX_PATH = 260
  22. Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
  23. Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
  24. Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
  25. Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
  26.  
  27. Public Function fBrowseForFolder(hWndOwner As Long, sPrompt As String, WhatBr) As String
  28. Dim iNull As Integer
  29. Dim lpIDList As Long
  30. Dim lResult As Long
  31. Dim sPath As String
  32. Dim udtBI As BrowseInfo
  33. With udtBI
  34. .hWndOwner = hWndOwner
  35. .lpszTitle = lstrcat(sPrompt, "")
  36. .ulFlags = WhatBr
  37. End With
  38. lpIDList = SHBrowseForFolder(udtBI)
  39. If lpIDList Then
  40. sPath = String$(MAX_PATH, 0)
  41. lResult = SHGetPathFromIDList(lpIDList, sPath)
  42. Call CoTaskMemFree(lpIDList)
  43. iNull = InStr(sPath, vbNullChar)
  44. If iNull Then sPath = Left$(sPath, iNull - 1)
  45. End If
  46. fBrowseForFolder = sPath
  47. End Function
  48.  
  49. Private Sub Command1_Click()
  50. Dim sStr As String
  51. Dim hWnd As Long
  52. 'BIF-константы можно комбинировать, так же можно и файл выбирать или принтер
  53. sStr = fBrowseForFolder(hWnd, "Выберите папку!",BIF_RETURNONLYFSDIRS)
  54. MsgBox sStr
  55.  
  56. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы