19 Сентябрь 2008

Открытие стандартного диалогового окна выбора каталога

Папки |  Таги: , , , , , , ,

Открытие стандартного диалогового окна выбора каталога.

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

SHGetPathFromIDList — возвращает в переменую pszPath as String полный путь каталога.

Private Type BROWSEINFO
  hOwner As Long
  pidlRoot As Long
  pszDisplayName As String
  lpszTitle As String
  ulFlags As Long
  lpfn As Long
  lParam As Long
  iImage As Long
End Type

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

Const BIF_RETURNONLYFSDIRS = &H1

Private Sub Command1_Click()
  Dim myBrowseInfo As BROWSEINFO
  Dim execNumderDir As Boolean
  Dim NumderDir As Long
  Dim pos As Integer
  Dim myPath_512 As String

  With myBrowseInfo
    .hOwner = Me.hWnd
    .pidlRoot = 0&
    .lpszTitle = "Select directory"
    .ulFlags = BIF_RETURNONLYFSDIRS
  End With

  NumderDir& = SHBrowseForFolder(myBrowseInfo)
  myPath_512$ = Space$(512)
  execNumderDir = SHGetPathFromIDList(ByVal NumderDir&, ByVal myPath_512$)

  If execNumderDir Then
    pos = InStr(myPath_512$, Chr$(0))
    myPath = Left(myPath_512$, pos - 1)
  Else:
    myPath = ""
  End If
  Text1.Text = myPath
End Sub


Оставить комментарий

Я не робот.