powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Непонятки со стандартным диалогом OpenFile (если инициализируешь ранее выбранным файлом)
2 сообщений из 2, страница 1 из 1
Непонятки со стандартным диалогом OpenFile (если инициализируешь ранее выбранным файлом)
    #37412707
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный диалог, никаких кастомизаций.
Новое для меня то, что я инициализирую его не просто предыдущей директорией
Код: plaintext
'OpenFile.sInitialDir = GetFileDir(TextSelectedFile.Text)
а ранее выбранным файлом.
Код: plaintext
1.
    If len(Trim(TextSelectedFile.Text)) >  0  Then
        OpenFile.sFile = Trim(TextSelectedFile.Text)

Собственно код, который "ошибался".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Private Sub CommandFileSelect_Click()
    Dim OpenFile As OPENFILENAME
    Dim lReturn As Long
    Dim TargetPath As String
    
    OpenFile.nStructSize = Len(OpenFile) '(OpenFile)
    OpenFile.hWndOwner = Me.hwnd
    OpenFile.hInstance = App.hInstance
    OpenFile.sFilter = "PDF (*.pdf)" & vbNullChar & "*.pdf" & vbNullChar & vbNullChar
    OpenFile.nFilterIndex =  1 
    If len(Trim(TextSelectedFile.Text)) >  0  Then
        OpenFile.sFile = Trim(TextSelectedFile.Text)
    else
        OpenFile.sFile = vbNullChar & Space$(MAX_PATH) & vbNullChar & vbNullChar
    End If
    OpenFile.nMaxFile = Len(vbNullChar & Space$(MAX_PATH) & vbNullChar & vbNullChar)
    OpenFile.sFileTitle = vbNullChar & Space$( 512 ) & vbNullChar & vbNullChar
    OpenFile.nMaxTitle = Len(OpenFile.sFileTitle)
    'OpenFile.sInitialDir = GetFileDir(TextSelectedFile.Text)
    OpenFile.sDialogTitle = "Select a file"
    OpenFile.Flags = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_NODEREFERENCELINKS Or _
      OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
      OFN_HIDEREADONLY Or OFN_ENABLESIZING Or OFN_ENABLEHOOK ' Or OFN_CREATEPROMPT
'========================================
    lReturn = GetOpenFileName(OpenFile)
'========================================
    If lReturn =  0  Then
        ChDrive Left(App.Path,  1 )
        ChDir App.Path
        Exit Sub
    End If
    TargetPath = Trim(OpenFile.sFile)
    'выправляем глюк
    If InStr(TargetPath, Chr( 0 )) >  0  Then
        TargetPath = Trim(Left(TargetPath, InStr(TargetPath, Chr( 0 )) -  1 ))
    End If
    TextSelectedFile.Text = TargetPath
    ChDrive Left(App.Path,  1 )
    ChDir App.Path
End Sub

Проблема получилась следующая:
Если начальное значение пути было коротким,
C:\111\test.pdf
а выбирался затем длинный путь, например:
C:\Documents and Settings\Дима\Рабочий стол\new.pdf
то TargetPath обрубался длиной предыдущего пути
C:\Documents a
и это несмотря на большой зарезервированный буфер:
Код: plaintext
OpenFile.nMaxFile = Len(vbNullChar & Space$(MAX_PATH) & vbNullChar & vbNullChar)

Я выкрутился (правда часа 2 экспериментировал), напихав в OpenFile.sFile "пустого места" через vbNullChar
Код: plaintext
1.
    OpenFile.sFile = Trim(TextSelectedFile.Text) & vbNullChar & Space$(MAX_PATH) & vbNullChar & vbNullChar
    OpenFile.nMaxFile = Len(OpenFile.sFile)

Ну вот не знаю, прав ли. Может сталкивался кто? Как правильно делать?
...
Рейтинг: 0 / 0
Непонятки со стандартным диалогом OpenFile (если инициализируешь ранее выбранным файлом)
    #37412711
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
прав. Сталкивался.
Не зависимо от размера буфера API функция не вернёт больше символов, чем есть в выходном параметре (переменной, в которую возвращается значение) на момент вызова функции.
ЗЫ:чтобы код легче читался ( и проще писа'лся ), целесообразно будет выделить переменные для
Код: plaintext
1.
vbNullChar & vbNullChar
vbNullChar & Space$(MAX_PATH) & vbNullChar & vbNullChar
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Непонятки со стандартным диалогом OpenFile (если инициализируешь ранее выбранным файлом)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]