Страница: 1 |
Вопрос: Вызов окна для выбора папки | Добавлено: 24.04.06 11:21 |
Автор вопроса: ![]() |
Как вызвать стандартное окошко windows ВЫБОРА ПАПОК??? Типа как при установке программ, при выборе каталога куда устанавливать вылазит это окошечко.
По типу Окна открытия файлов из CommonDialog. Окно Выбора папок тоже есть в CommonDialog или нет??? Если да, то как его вызвать??? И если нет, тото же как??? |
Ответы | Всего ответов: 4 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #1 | Добавлено: 24.04.06 11:26 |
SHBrowseForFolder |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 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 ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ICQ: 334-970-670 Вопросов: 14 Ответов: 20 |
Профиль | Цитата | #3 | Добавлено: 24.04.06 16:40 |
ОК, спасибо, работает. А как сделать так, чтобы это окошко открывалось с какой то определенной папки (т.е. в начале задать путь, с которого будет открываться это окошко)???
И еще, если я помещаю этот код на форму, то у меня в начале грузит это окошка, а после его закрытия еще и пустую форму, в которую этот код вставлял? Как сделать, чтобы вторая форма не загружалась?? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() 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& ![]() ![]() 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, "|" ![]() 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 & "\" ![]() End If End Function |
Страница: 1 |
|