Vb6: выбор файла для последующего использования с помощью кнопки обзора - PullRequest
4 голосов
/ 14 ноября 2008

Вот мой код (обратите внимание, что это дал друг):

Private Sub Browse_Click()
   Dim textfile As String
   textfile = Space(255)
   GetFileNameFromBrowseW Me.hWnd, StrPtr(sSave), 255, StrPtr("c:\"), 
      StrPtr("txt"), StrPtr("Apps (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) +
      "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("Select File")
      Text1 = Left$(textfile, lstrlen(textfile))
End Sub

В основном позже я редактирую выбранный текстовый файл, поэтому позже я вызываю его, просто используя текстовый файл в своей функции. Однако я не нашел пути, поэтому чувствую, что делаю что-то не так. Заранее спасибо.

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

Ответы [ 5 ]

9 голосов
/ 14 ноября 2008

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

В VB6 добавьте компонент:

  • Проект> Компоненты
  • На вкладке Элементы управления выберите Microsoft Common Dialog Control 6.0 (SP6)

Теперь в вашей форме добавьте новый элемент управления Common Dialog из панели инструментов

В коде вам нужно:

CommonDialog.Filter = "Apps (*.txt)|*.txt|All files (*.*)|*.*"
CommonDialog.DefaultExt = "txt"
CommonDialog.DialogTitle = "Select File"
CommonDialog.ShowOpen

'The FileName property gives you the variable you need to use
MsgBox CommonDialog.FileName
1 голос
/ 14 ноября 2008

Разве эта функция не предоставляется "Common Dialog Controls" в VB6?

Мой VB6 немного заржавел, но основной диалог для выбора файла уже предоставлен.
Сервис -> Элементы управления -> Microsoft Common Dialog Controls v ....

Кроме того, ваш вызов GetFileNameFromBrowseW не включает ссылку на переменную - textfile

0 голосов
/ 14 ноября 2008

С здесь

Я нашел этот код и запустил его.

Private Const VER_PLATFORM_WIN32_NT = 2
Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetFileNameFromBrowseW Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As Long, ByVal nMaxFile As Long, ByVal lpstrInitialDir As Long, ByVal lpstrDefExt As Long, ByVal lpstrFilter As Long, ByVal lpstrTitle As Long) As Long
Private Declare Function GetFileNameFromBrowseA Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As String, ByVal nMaxFile As Long, ByVal lpstrInitialDir As String, ByVal lpstrDefExt As String, ByVal lpstrFilter As String, ByVal lpstrTitle As String) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim sSave As String
    sSave = Space(255)
    'If we're on WinNT, call the unicode version of the function
    If IsWinNT Then
        GetFileNameFromBrowseW Me.hWnd, StrPtr(sSave), 255, StrPtr("c:\"), StrPtr("txt"), StrPtr("Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("The Title")
    'If we're not on WinNT, call the ANSI version of the function
    Else
        GetFileNameFromBrowseA Me.hWnd, sSave, 255, "c:\", "txt", "Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0), "The Title"
    End If
    'Show the result
    MsgBox sSave
End Sub
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

Из того, что я могу вам сказать, функция GetFileName выглядит правильно, так что я думаю, проблема в этом

Text1 = Left$(textfile, lstrlen(textfile))

Используйте это, чтобы проверить

MsgBox "(" & Text1 & ")-(" & textfile & ")"

чтобы убедиться, что вы получаете ожидаемый результат от Left $ и lstrlen

0 голосов
/ 14 ноября 2008

Заменить sSave на textfile. Когда вам позже понадобится обратиться к выбранному файлу, используйте Text1 (предположительно элемент управления текстовым полем VB, так что один только Text1 неявно вызывает Text1.Text, .Text - элемент по умолчанию для VB.Textbox).

0 голосов
/ 14 ноября 2008

Возможно, sSave содержит путь, но текстовый файл содержит 255 пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...