activex.net.ru

ActiveX .NET SharePoint Утилиты Скрипты Статьи ... Форум

Статьи

Эффективный способ выбора директории с помощью API (Visual Basic)

Иногда в приложении требуется, чтобы пользователь выбрал некую папку на своем компьютере, приложение получило полное имя данной папки и соответствующим образом продолжило свою работу. В данном примере показано, как средствами только API можно этого добиться. Ниже на скриншоте показан пример работы приложения:

Пример работы

1. Выберем проект как Standard EXE.
2. Добавим на форму кнопку CommandButton (Command1) и текстовое поле TextBox (Text1).
3. Затем добавим приведенный ниже код:

 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

 Const BIF_RETURNONLYFSDIRS = 1
 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


Private Function BrowseForFolder(hwndOwner As Long, sPrompt As String) 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 = BIF_RETURNONLYFSDIRS
 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

BrowseForFolder = spath

End Function

Private Sub Command1_Click()
 Dim tmp As String
 tmp = BrowseForFolder(hWnd, "Выбор каталога ...")
 Text1.Text = tmp
End Sub

Всю основную работу выполняет функция BrowseForFolder. Она формирует окно выбора директории и возвращает полное имя выбранной директории. В случае, если пользователь ничего не выбрал, функция возвращает пустую строку.

Пример проекта прилагается: brfolder.zip



Copyright © 2000-2017 Христофоров Юрий Rambler's Top100

   Rambler's Top100