Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Вызов окна для выбора папки Добавлено: 24.04.06 11:21  

Автор вопроса:  Albert | ICQ: 334-970-670 
Как вызвать стандартное окошко windows ВЫБОРА ПАПОК??? Типа как при установке программ, при выборе каталога куда устанавливать вылазит это окошечко.
По типу Окна открытия файлов из CommonDialog. Окно Выбора папок тоже есть в CommonDialog или нет??? Если да, то как его вызвать??? И если нет, тото же как???

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #1 Добавлено: 24.04.06 11:26
SHBrowseForFolder

Ответить

Номер ответа: 2
Автор ответа:
 BlDm



Вопросов: 7
Ответов: 6
 Профиль | | #2 Добавлено: 24.04.06 15:43
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 Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'KPDTeam@Allapi.net
    ;Dim iNull As Integer, lpIDList As Long, lResult As Long
    ;Dim sPath As String, udtBI As BrowseInfo

    With udtBI
        'Set the owner window
        .hWndOwner = Me.hWnd
        'lstrcat appends the two strings and returns the memory address
        .lpszTitle = lstrcat("C:\", "";)
        'Return only if the user selected a directory
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With

    'Show the 'Browse for folder' dialog
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        'Get the path from the IDList
        SHGetPathFromIDList lpIDList, sPath
        'free the block of memory
        CoTaskMemFree lpIDList
        iNull = InStr(sPath, vbNullChar)
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
    End If

    MsgBox sPath
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Albert



ICQ: 334-970-670 

Вопросов: 14
Ответов: 20
 Профиль | | #3 Добавлено: 24.04.06 16:40
ОК, спасибо, работает. А как сделать так, чтобы это окошко открывалось с какой то определенной папки (т.е. в начале задать путь, с которого будет открываться это окошко)???

И еще, если я помещаю этот код на форму, то у меня в начале грузит это окошка, а после его закрытия еще и пустую форму, в которую этот код вставлял? Как сделать, чтобы вторая форма не загружалась??

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 25.04.06 11:07
Ну, если ты в Form_Load его вставляешь - то полюбому будет загружаться форма, это же событие её загрузки :)
По поводу сабжа - откопал модуль от sne, кое-что там исправлено, но разберешься. Начальный каталог - параметр InitDir функции fBrowseForFolder


'***************************************************************************************
'*                     Написано: 01.08.2003 (Team HomeWork)                            *
'*                           e-mail: sne_pro@mail.ru                                   *
'***************************************************************************************

Option Explicit
Private Declare Function GetOpenFileNameA Lib "comdlg32" (FileName As FileName) As Long
Private Declare Function GetSaveFileNameA Lib "comdlg32" (FileName As FileName) As Long
Private Declare Function ChooseColorAPI Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
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
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Type FileName
    lngStructSize     As Long
    lngHandle         As Long
    lngInstance       As Long
    strFilter         As String
    strCustomFilter   As String
    lngMaxCustFilter  As Long
    lngFilterIndex    As Long
    strFile           As String
    lngMaxFile        As Long
    strFileTitle      As String
    lngMaxFileTitle   As Long
    strInitialDir     As String
    strTitle          As String
    lngFlags          As Long
    intFileOffset     As Integer
    intFileExtension  As Integer
    strDefExt         As String
    lngCustData       As Long
    lngHook           As Long
    strTemplateName   As String
End Type

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 Type CHOOSECOLOR
    lStructSize         As Long
    hwndOwner           As Long
    hInstance           As Long
    RGBResult           As Long
    lpCustColors        As String
    flags               As Long
    lCustData           As Long
    lpfnHook            As Long
    lpTemplateName      As String
End Type

Public Enum CdlgExt_Flags
    OFN_CREATEPROMPT = &H2000
    OFN_ENABLESIZING = &H800000
    OFN_EXPLORER = &H80000
    OFN_FILEMUSTEXIST = &H1000
    OFN_HIDEREADONLY = &H4
    OFN_OVERWRITEPROMPT = &H2
    OFN_PATHMUSTEXIST = &H800
End Enum

Public Enum WhatBrowse
    BIF_RETURNONLYFSDIRS = &H1
    BIF_DONTGOBELOWDOMAIN = &H2
    BIF_STATUSTEXT = &H4
    BIF_RETURNFSANCESTORS = &H8
    BIF_EDITBOX = &H10
    BIF_NEWDIALOGSTYLE = &H40
    BIF_BROWSEINCLUDEFILES = &H1 Or &H4000
    BIF_BROWSEFORCOMPUTER = &H1000
    BIF_BROWSEFORPRINTER = &H2000
    BIF_USENEWUI = (BIF_NEWDIALOGSTYLE Or BIF_EDITBOX)
End Enum

Private Const MAX_PATH  As Long = 260

Private Inst            As Long, _
        sArray()        As String, _
        sBuffer         As String

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  GetOpenFileName
' Описание   :  Отурытие файла
' Кем создан :  SNE
' Дата-Время :  08.11.2004-17:44:28
'
' Параметры  :  lngHandle   - Хэндл родителя
'               lDlgStyle   - Стиль окна открытия
'               strFilter   - Фильтр
'               FltrIndex   - Номер используемого фильтра
'               sInitPath   - Начальный путь
'               sInitFile   - Начальное имя файла
'               sDlgTitle   - Заголовок окошка
'--------------------------------------------------------------------------------
Public Function GetOpenFileName(Optional ByVal lngHandle As Long = &H0, _
                                Optional ByVal lDlgStyle As CdlgExt_Flags = OFN_HIDEREADONLY, _
                                Optional ByVal strFilter As String = vbNullString, _
                                Optional ByVal FltrIndex As Long = &H1, _
                                Optional ByVal sInitPath As String = vbNullString, _
                                Optional ByVal sInitFile As String = vbNullString, _
                                Optional ByVal sDlgTitle As String = vbNullString) As String
    Dim FN As FileName
    Call InitialisateOFN(FN, lngHandle, lDlgStyle, strFilter, FltrIndex, sInitPath, sInitFile, sDlgTitle)
     
    Call GetOpenFileNameA(FN)
    Inst = InStr(1&, FN.strFile, vbNullChar) - &H1
    If Inst Then GetOpenFileName = Left$(FN.strFile, Inst)
End Function

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  GetSaveFileName
' Описание   :  Сохранение файла
' Кем создан :  SNE
' Дата-Время :  08.11.2004-17:44:28
'
' Параметры  :  lngHandle   - Хэндл родителя
'               lDlgStyle   - Стиль окна открытия
'               strFilter   - Фильтр
'               FltrIndex   - Номер используемого фильтра
'               sInitPath   - Начальный путь
'               sInitFile   - Начальное имя файла
'               sDlgTitle   - Заголовок окошка
'--------------------------------------------------------------------------------
Public Function GetSaveFileName(Optional ByVal lngHandle As Long = &H0, _
                                Optional ByVal lDlgStyle As CdlgExt_Flags = OFN_HIDEREADONLY, _
                                Optional ByVal strFilter As String = vbNullString, _
                                Optional ByVal FltrIndex As Long = &H1, _
                                Optional ByVal sInitPath As String = vbNullString, _
                                Optional ByVal sInitFile As String = vbNullString, _
                                Optional ByVal sDlgTitle As String = vbNullString) As String
    Dim FN As FileName
    Call InitialisateOFN(FN, lngHandle, lDlgStyle, strFilter, FltrIndex, sInitPath, sInitFile, sDlgTitle)
     
    Call GetSaveFileNameA(FN)
    Inst = InStr(1&, FN.strFile, vbNullChar) - &H1
    If Inst Then GetSaveFileName = Left$(FN.strFile, Inst)
End Function

Private Sub InitialisateOFN(ByRef FN As FileName, _
                            ByVal lngHandle As Long, _
                            ByVal lDlgStyle As CdlgExt_Flags, _
                            ByVal strFilter As String, _
                            ByVal FltrIndex As Long, _
                            ByVal sInitPath As String, _
                            ByVal sInitFile As String, _
                            ByVal sDlgTitle As String)
    For Inst = 1 To Len(strFilter)
        If Mid$(strFilter, Inst, 1&;) = "|" Then Mid$(strFilter, Inst, 1&;) = vbNullChar
    Next
    strFilter = strFilter & vbNullChar & vbNullChar

    With FN
        .lngStructSize = Len(FN)
        .lngHandle = lngHandle
        .lngFlags = lDlgStyle Or OFN_EXPLORER
        .lngInstance = App.hInstance
         
        .lngMaxFile = MAX_PATH
        .lngMaxFileTitle = MAX_PATH
         
        .strFile = sInitFile & String$(MAX_PATH - Len(sInitFile), &H0)
        .strFileTitle = String$(MAX_PATH, &H0)
         
        .strFilter = strFilter
        .lngFilterIndex = FltrIndex
        .strInitialDir = sInitPath
        .strTitle = sDlgTitle
    End With
End Sub

' §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  ShowColor
' Описание   :  Выбор цвета
' Кем создан :  SNE
' Дата-Время :  08.11.2004-17:44:28
'
' Параметры  :  hOwner      - Хэндл родителя
'               InOutColor  - Цвет
'--------------------------------------------------------------------------------
Public Function ShowColor(hOwner As Long, InOutColor As Long) As Long
    Dim shi As Integer
    Dim CC As CHOOSECOLOR
    Dim CustomColors(&H0 To &H10 * &H4 - &H1) As Byte

    For shi = 0 To UBound(CustomColors)
        CustomColors(shi) = &HFF
    Next

    With CC
        .lStructSize = Len(CC)
        .hwndOwner = hOwner
        .hInstance = App.hInstance
        .lpCustColors = StrConv(CustomColors, vbUnicode)
        .flags = &H1 Or &H2 Or &H4 Or &H8
        .RGBResult = InOutColor
        If ChooseColorAPI(CC) Then
            InOutColor = .RGBResult: ShowColor = .RGBResult
        Else
            ShowColor = InOutColor
        End If
    End With
End Function

' §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  fBrowseForFolder
' Описание   :  Обзор каталогов
' Кем создан :  SNE
' Дата-Время :  08.11.2004-17:44:28
'
' Параметры  :  hOwner      - Хэндл родителя
'               sPrompt     - Надпись сверху
'               WhatBr      - Что будем смотреть
'               InitDir     - Начальный каталог
'               fileMasks   - Маска файлов
'--------------------------------------------------------------------------------
Public Function fBrowseForFolder(ByVal hOwner As Long, _
                        Optional ByVal sPrompt As String, _
                        Optional ByVal WhatBr As WhatBrowse, _
                        Optional ByVal InitDir As String = vbNullString, _
                        Optional ByVal fileMasks As String = vbNullString) As String
    Dim udtBI As BROWSEINFO
    With udtBI
        .hOwner = hOwner
        .lpszTitle = Trim$(sPrompt)
        .ulFlags = WhatBr
        Call CopyMemory(.lpfn, AddressOf BrowseCallbackProc, &H4)
    End With
     
    sBuffer = InitDir
    If Len(fileMasks) Then sArray = Split(fileMasks, "|";) Else ReDim sArray(0)
     
    Inst = SHBrowseForFolder(udtBI)
    fBrowseForFolder = String$(&H200, &H0)
    If Inst And SHGetPathFromIDList(Inst, fBrowseForFolder) = vbNull Then
        fBrowseForFolder = Left$(fBrowseForFolder, InStr(&H1, fBrowseForFolder, vbNullChar) - &H1)
        Call AddSlash(fBrowseForFolder)
    Else
        fBrowseForFolder = vbNullString
    End If
End Function

Private Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
    Dim ci As Long, sPath As String
     
    Select Case uMsg
        Case Is = &H1           'BFFM_INITIALIZED
            If Len(sBuffer) Then Call SendMessage(hWnd, &H466, &H1, ByVal sBuffer & vbNullChar)

        Case Is = &H2           'BFFM_SELCHANGED
            sPath = String$(&H200, &H0)
            If Not SHGetPathFromIDList(lParam, sPath) = vbNull Then Exit Function
             
            sPath = Left$(sPath, InStr(1, sPath, vbNullChar) - 1)
            Call AddSlash(sPath)
            Call SendMessage(hWnd, &H464, &H0, ByVal sPath)
             
            If Len(sArray(0)) = &H0 Then Exit Function
            Call SendMessage(hWnd, &H465, &H0, ByVal False)
            For ci = 0 To UBound(sArray)
                If Len(Dir$(sPath & sArray(ci))) Then
                    Call SendMessage(hWnd, &H465, &H0, ByVal True)
                    Exit For
                End If
            Next
    End Select
End Function

Private Function AddSlash(ByRef inPath As String) As String
    On Error Resume Next
    Dim nf As Integer: nf = FreeFile
    AddSlash = inPath
    If Len(Dir(inPath)) = 0 Then
    AddSlash = IIf(Right$(inPath, &H1) = "\", inPath, inPath & "\";): inPath = AddSlash
    End If
End Function



Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам