Здравствуйте, <Аноним>, Вы писали:
А>Добрый день
А>Столкнулся с проблемой выбора каталога из произвольного корня. Использовал API функцию SHBrowseForFolder и SHSimpleIDListFromPath
А>SHSimpleIDListFromPath адекватно не работает, в чем проблема и есть ли ее аналог?
А>Заранее благодарен.
Есть более простой способ. Для начала необходимо подключить к проекту Shell32.dll. Затем код (выдран из модуля, поэтому несамодостаточен=))):
Private Const BIF_RETURNONLYFSDIRS& = &H1 'выбор только объектов файловой системы
Private Const BIF_EDITBOX& = &H10 'текстовое поле
Private Const BIF_VALIDATE& = &H20 'проверка строки текстового поля
Private Const BIF_NEWDIALOGSTYLE& = &H40 'модерновый дизайн
Private Const BIF_RETURNFSANCESTORS& = &H8 'хз
Public Sub ShowFolder()
Dim oShell As Shell
Dim oFolder As Folder
Dim oFolderItem As FolderItem
Set oShell = New Shell
Set oFolder = oShell.BrowseForFolder(mhOwner, mDialogTitle, mFlags, mInitDir)
If IsNull(oFolder) And mCancelError Then
Call Err.Raise(vbObjectError + 1)
Else
Set oFolderItem = oFolder.Items.Item
mFileName = oFolderItem.Path
Set oFolderItem = Nothing
End If
Set oFolder = Nothing
Set oShell = Nothing
End Sub
Где mhOwner — hWnd родителя (может быть 0); mDialogTitle — заголовок диалога; mFlags — см. константы; mInitDir — директория -- может быть как строкой, так и числовой константой (см. ниже); mFileName — содержит путь к выбранной директории.
А вот и константы для директорий, думаю, понятно, что к чему:
enum ShellSpecialFolderConstants
{ ssfDESKTOP = 0,
ssfPROGRAMS = 0x2,
ssfCONTROLS = 0x3,
ssfPRINTERS = 0x4,
ssfPERSONAL = 0x5,
ssfFAVORITES = 0x6,
ssfSTARTUP = 0x7,
ssfRECENT = 0x8,
ssfSENDTO = 0x9,
ssfBITBUCKET = 0xa,
ssfSTARTMENU = 0xb,
ssfDESKTOPDIRECTORY = 0x10,
ssfDRIVES = 0x11,
ssfNETWORK = 0x12,
ssfNETHOOD = 0x13,
ssfFONTS = 0x14,
ssfTEMPLATES = 0x15,
ssfCOMMONSTARTMENU = 0x16,
ssfCOMMONPROGRAMS = 0x17,
ssfCOMMONSTARTUP = 0x18,
ssfCOMMONDESKTOPDIR = 0x19,
ssfAPPDATA = 0x1a,
ssfPRINTHOOD = 0x1b,
ssfLOCALAPPDATA = 0x1c,
ssfALTSTARTUP = 0x1d,
ssfCOMMONALTSTARTUP = 0x1e,
ssfCOMMONFAVORITES = 0x1f,
ssfINTERNETCACHE = 0x20,
ssfCOOKIES = 0x21,
ssfHISTORY = 0x22,
ssfCOMMONAPPDATA = 0x23,
ssfWINDOWS = 0x24,
ssfSYSTEM = 0x25,
ssfPROGRAMFILES = 0x26,
ssfMYPICTURES = 0x27,
ssfPROFILE = 0x28,
} ShellSpecialFolderConstants;
... << RSDN@Home 1.1 beta 1 >>