Страница: 1 |
Вопрос: Диалог открытия файла и multiselect | Добавлено: 17.07.07 20:37 |
Автор вопроса: ![]() |
Вызываю GetOpenFileName. И если задан флаг OFN_ALLOWMULTISELECT, она возвращает на конце 2 нулевых символа... От этого можно как-то избавиться? Мелочь конечно, но неприятно. Если OFN_ALLOWMULTISELECT убрать, то все нормально на конце только 1 нулевой символ. |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #1 | Добавлено: 18.07.07 10:45 |
Код в студию, плз
|
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 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 ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 629966 Вопросов: 118 Ответов: 903 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 18.07.07 17:31 |
есть такое vbNullString - используй вместо ноликов ![]() |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #4 | Добавлено: 18.07.07 19:30 |
А может заместо
MsgBox Replace(RTrim$(strFileName), vbNullChar, "Null" ![]() надо MsgBox Left$(strFileName,InStrRev(strFileName,vbNullChar)-1) ? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #5 | Добавлено: 19.07.07 01:07 |
MsgBox Replace(RTrim$(strFileName), vbNullChar, "Null" ![]() Соответственно получаю 2 раза NullNull на конце.
Плакалъ ![]() Дык возьми потом ещё Replace (strFileName, "NullNull", ""
![]() Воспринять как шутку ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 4 |
Профиль | Цитата | #6 | Добавлено: 19.07.07 11:23 |
ZagZag:
Я так и делаю. Только в случае OFN_ALLOWMULTISELECT приходится Left$(strFileName,InStrRev(strFileName,vbNullChar)-2), без него -1. А на "Null" я заменил просто, чтобы это было наглядно видно в msgbox. |
Страница: 1 |
|