Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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 (a) 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-сайт: www.aliyev.us
 Профиль | | #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
MsgBox Replace(RTrim$(strFileName), vbNullChar, "Null";)


Соответственно получаю 2 раза NullNull на конце.

Плакалъ :)

Дык возьми потом ещё
Replace (strFileName, "NullNull", "";)


Воспринять как шутку :)

Ответить

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



Вопросов: 8
Ответов: 4
 Профиль | | #6 Добавлено: 19.07.07 11:23
ZagZag:
Я так и делаю. Только в случае OFN_ALLOWMULTISELECT приходится Left$(strFileName,InStrRev(strFileName,vbNullChar)-2), без него -1.

А на "Null" я заменил просто, чтобы это было наглядно видно в msgbox.

Ответить

Страница: 1 |

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



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