Re: Просмотр каталогов с любой папки как корня под VBА, как?
От: vitOS_base http://wowyupiyo.livejournal.com
Дата: 19.08.03 09:34
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Добрый день


А>Столкнулся с проблемой выбора каталога из произвольного корня. Использовал 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.