Страница: 1 |
Страница: 1 |
Вопрос: Диалог открытия файла и multiselect
Добавлено: 17.07.07 20:37
Автор вопроса: fm458
Вызываю GetOpenFileName. И если задан флаг OFN_ALLOWMULTISELECT, она возвращает на конце 2 нулевых символа... От этого можно как-то избавиться? Мелочь конечно, но неприятно. Если OFN_ALLOWMULTISELECT убрать, то все нормально на конце только 1 нулевой символ.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #1
Добавлено: 18.07.07 10:45
Код в студию, плз
Номер ответа: 2
Автор ответа:
fm458
Вопросов: 8
Ответов: 4
Профиль | | #2
Добавлено: 18.07.07 17:29
Вот модуль:
Option Explicit
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Enum dlgFileFlags
OFN_READONLY = &H1
OFN_OVERWRITEPROMPT = &H2
OFN_HIDEREADONLY = &H4
OFN_NOCHANGEDIR = &H8
OFN_SHOWHELP = &H10
OFN_ENABLEHOOK = &H20
OFN_ENABLETEMPLATE = &H40
OFN_ENABLETEMPLATEHANDLE = &H80
OFN_NOVALIDATE = &H100
OFN_ALLOWMULTISELECT = &H200
OFN_EXTENSIONDIFFERENT = &H400
OFN_PATHMUSTEXIST = &H800
OFN_FILEMUSTEXIST = &H1000
OFN_CREATEPROMPT = &H2000
OFN_SHAREAWARE = &H4000
OFN_NOREADONLYRETURN = &H8000
OFN_NOTESTFILECREATE = &H10000
OFN_NONETWORKBUTTON = &H20000
OFN_NOLONGNAMES = &H40000
OFN_EXPLORER = &H80000
OFN_NODEREFERENCELINKS = &H100000
OFN_LONGNAMES = &H200000
End Enum
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOPENFILENAME As OPENFILENAME) As Long
Public Function ShowOpenFileDialog(hwndOwner As Long, sfilter As String, sInitDir As String, Flags As dlgFileFlags) As String
Dim ofn As OPENFILENAME
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = hwndOwner
ofn.hInstance = App.hInstance
ofn.lpstrFilter = sfilter
ofn.lpstrFile = Space$(1023)
ofn.nMaxFile = 1024
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = sInitDir
ofn.lpstrTitle = "Open file"
ofn.Flags = Flags
Dim a
a = GetOpenFileName(ofn)
If Then
ShowOpenFileDialog = ofn.lpstrFile
Else
ShowOpenFileDialog = ""
End If
End Function
А так вызываю в форме:
Dim strFileName As String
Dim strFileNames() As String
Dim i As Integer
strFileName = ShowOpenFileDialog(Me.hWnd, _
"Text (*.txt)" + Chr$(0) + "*.txt" + Chr$(0), _
"e:\", _
OFN_ALLOWMULTISELECT Or OFN_HIDEREADONLY Or OFN_EXPLORER)
MsgBox Replace(RTrim$(strFileName), vbNullChar, "Null"
Соответственно получаю 2 раза NullNull на конце. Убираю OFN_ALLOWMULTISELECT и получаю 1 Null...
Номер ответа: 3
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #3
Добавлено: 18.07.07 17:31
есть такое vbNullString - используй вместо ноликов
Номер ответа: 4
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #4
Добавлено: 18.07.07 19:30
А может заместо
MsgBox Replace(RTrim$(strFileName), vbNullChar, "Null"
надо
MsgBox Left$(strFileName,InStrRev(strFileName,vbNullChar)-1)
?
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 19.07.07 01:07
Плакалъ
Дык возьми потом ещё
Воспринять как шутку
Номер ответа: 6
Автор ответа:
fm458
Вопросов: 8
Ответов: 4
Профиль | | #6
Добавлено: 19.07.07 11:23
ZagZag:
Я так и делаю. Только в случае OFN_ALLOWMULTISELECT приходится Left$(strFileName,InStrRev(strFileName,vbNullChar)-2), без него -1.
А на "Null" я заменил просто, чтобы это было наглядно видно в msgbox.