Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Обзор выбор файла Добавлено: 30.11.10 21:05  

Автор вопроса:  MISTER X | Web-сайт: studioartf.ru | ICQ: 463865965 
Народ хелп.Мне надо по кнопке вызвать проводник по ФАЙЛАМ а не по папкам,с дальнейшим полусением пути к файлу.Для обзора по папкам пользуюсь

Dim VibFolder As String

gWH = Me.hwnd
  OldWndProc = SetWindowLong(gWH, GWL_WNDPROC, AddressOf BrowseProc)
  OldWndProc = SetWindowLong(gWH, GWL_WNDPROC, OldWndProc)

  VibFolder = BrowseForFolder(Me.hwnd, "Выберите папку", "C:\")

И дальше VibFolder задается как путь к папке,по которой я могу создать в той дирректории файл тхт например.а мне надо чтоб юзер кликнул открыть и ему предоствилась возможность выбрать файл,тк код выше файлы не показывает.

Ответить

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

Номер ответа: 1
Автор ответа:
 MISTER X



ICQ: 463865965 

Вопросов: 31
Ответов: 190
 Web-сайт: studioartf.ru
 Профиль | | #1
Добавлено: 30.11.10 21:09
забыл сказать надо еще в модуле следующий код:
  1.  
  2. Option Explicit
  3.  
  4. Public Const GWL_WNDPROC = -4
  5. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  6. Private Declare Function SendMessageBynum Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  7. Public gWH As Long
  8. Public OldWndProc As Long
  9.  
  10. Const MAX_PATH = 260
  11.  
  12. ' Message from browser
  13. Const BFFM_INITIALIZED = 1
  14. Const BFFM_SELCHANGED = 2
  15. Const WM_USER = &H400
  16. Const BFFM_SETSELECTIONW = WM_USER + 103
  17. Const BFFM_SETSTATUSTEXTW = WM_USER + 104
  18.  
  19. ' Browsing for directory
  20. Const BIF_RETURNONLYFSDIRS = &H1  ' For finding a folder to start document searching
  21. Const BIF_STATUSTEXT = &H4
  22.  
  23. Private Type BrowseInfo
  24.   hwndOwner As Long
  25.   pIDLRoot As Long
  26.   pszDisplayName As Long
  27.   lpszTitle As String
  28.   ulFlags As Long
  29.   lpfnCallback As Long
  30.   lParam As Long
  31.   iImage As Long
  32. End Type
  33.  
  34. Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
  35. Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
  36. Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
  37.  
  38. Public Function BrowseProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  39.   Dim szDir As String
  40.   Select Case Msg
  41.   Case BFFM_INITIALIZED ' Сообщение инициализации диалога
  42. ' Если был передан адрес, то нужно открыть папку
  43.     If lParam <> 0 Then SendMessageBynum hwnd, BFFM_SETSELECTIONW, 1, lParam
  44.   Case BFFM_SELCHANGED
  45.     szDir = String$(MAX_PATH, 0)
  46.     If (SHGetPathFromIDList(wParam, szDir)) Then SendMessageBynum hwnd, BFFM_SETSTATUSTEXTW, 0, StrPtr(szDir)
  47.   End Select
  48. End Function
  49.  
  50. Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String, Optional CurrentDir As String = "") As String
  51.   Dim intNull As Integer, lngIdList As Long
  52.   Dim udtBI As BrowseInfo
  53.   Dim strPath As String
  54.   Dim dl As Long
  55.  
  56. ' Заполняем поля структуры udtBI. Она используется
  57. ' функцией SHBrowseForFolder (см. ниже)
  58.   With udtBI
  59.     .hwndOwner = hwndOwner
  60.     .lpszTitle = sPrompt
  61.     .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_STATUSTEXT
  62.     .lpfnCallback = OldWndProc
  63. ' Если указан путь, то передать адрес строки содержащей путь.
  64. ' При инициализации диалога выбора папки мы воспользуемся
  65. ' этим значением, чтобы при появлении окошка уже была открыта
  66. ' нужная ветка.
  67.     .lParam = IIf(CurrentDir = "", 0, StrPtr(CurrentDir))
  68.   End With
  69.  
  70.   lngIdList = SHBrowseForFolder(udtBI)
  71.   Debug.Print lngIdList
  72.   If lngIdList Then
  73.     strPath = String$(MAX_PATH, 0)
  74.     dl = SHGetPathFromIDList(lngIdList, strPath)
  75.     CoTaskMemFree lngIdList
  76.     intNull = InStr(strPath, vbNullChar)
  77.     If intNull Then strPath = Left$(strPath, intNull - 1)
  78.   End If
  79.  
  80.   BrowseForFolder = strPath
  81.  
  82. End Function

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 01.12.10 09:45
Поступи проще - используй MSCommonDialog control. Уж эта приблуда стоит сейчас на каждой машине.
Если не нравится - на сайте были примеры работы с MSCommonDialog на API.

Ответить

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



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 01.12.10 10:21
всего то 83строчки неоптимизированного кода. это куда проще, чем целых две строки на дотнете не так ли :)
  1. Using FBDialog As New OpenFileDialog
  2. End Using

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 01.12.10 10:51
CommonDialog1.ShowOpen
Одна строчка.
А если есть желание изобретать велосипед - можно и на дотнете эту задачу развернуть на 300 строк кода.

Ответить

Номер ответа: 5
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #5 Добавлено: 01.12.10 11:48
LamerOnLine пишет:
Одна строчка.

А добавление референсов - это не считается?
А освобождение неуправляемых ресурсов где?
А дополнительные настройки, например, автоапгрейд диалогового окна для win7? Есть??

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 01.12.10 12:07
Все зависит от того кому что нужно. Тебе - потупить, MISTER X - открыть файл.
Остальное - бред. Снова, и еще глупее чем раньше.

Ответить

Номер ответа: 7
Автор ответа:
 MISTER X



ICQ: 463865965 

Вопросов: 31
Ответов: 190
 Web-сайт: studioartf.ru
 Профиль | | #7
Добавлено: 01.12.10 16:45
всем спасиб)
LamerOnLine пишет:
Тебе - потупить

*ROFL*

Ответить

Номер ответа: 8
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #8 Добавлено: 01.12.10 17:39
Ясно. слив засчитан :)

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 01.12.10 17:54
Опять слив? :)
Агент, если ты не заметил тенденции - каждый раз когда кто то задает вопрос по существу - и я по существу на него отвечаю - появляешься ты и начинаешь троллить, после чего засчитываешь мне слив. Смотри, на ресурсах с менее толерантной модерацией за такое можно схлопотать ридонли на недельку-другую.
Но не паникуй, это лечится амбулаторно. Тебе поможет водка и уринотерапия ;)

Ответить

Номер ответа: 10
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #10
Добавлено: 01.12.10 18:39

Offtop:
AgentFire пишет:
Ясно. слив засчитан

и снова

Ответить

Номер ответа: 11
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #11
Добавлено: 01.12.10 18:39
*оффтоп

Ответить

Номер ответа: 12
Автор ответа:
 MISTER X



ICQ: 463865965 

Вопросов: 31
Ответов: 190
 Web-сайт: studioartf.ru
 Профиль | | #12
Добавлено: 01.12.10 19:30

Offtop:
offtop

Ответить

Номер ответа: 13
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #13 Добавлено: 01.12.10 20:45
Очень даже заметил такую тенденцию =) ну И как, сколько у тебя сливов уже на счету? :)

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #14 Добавлено: 02.12.10 00:29
Найди один, балабол.

Ответить

Номер ответа: 15
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #15
Добавлено: 02.12.10 22:21
LamerOnLine пишет:
балабол.

:)

Offtop:
*ROFL*

Ответить

Страница: 1 | 2 |

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



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