Соберем вместе все варианты, а добавил кнопку к нашей функции BrowseForFile
'<doc Выбор папки
'<par %1 As String Первоначальный путь>
'<par %2 As String Заголовок>
'>
Function BrowseForFolder( StartPath, Caption )
BrowseForFolder = ""
Set objShell = CreateObject("Shell.Application")
If Caption="" Then Caption = "Выберите папку:"
Set objFolder = objShell.BrowseForFolder( 0, Caption, 0, StartPath)
If Not objFolder Is Nothing Then
BrowseForFolder = objFolder.Self.Path
End If
End Function
'<doc Выбор файла
'<par %1 As String Первоначальный путь>
'<par %2 As String Заголовок>
'<par %3 As String Маска для выбора>
'>
Function BrowseForFile( StartPath, Caption, FileMask )
BrowseForFile = ""
Set Form = TCSApp.TCSForm( "", False )
If Caption="" Then Caption = "Выберите файл:"
Form.Caption = Caption
Call Form.CreateControl( "TVBCSFilenameEdit", "FName", "" )
Set C = Form.Controls( "FName" )
C.FileName = ""
C.Left = 5
C.Top = 5
C.Width = 400
If StartPath<>"" Then C.InitialDir = StartPath
If FileMask<>"" Then C.Filter = FileMask
Call Form.CreateControl( "TVBButton", "OkBtn", "" )
Set B = Form.Controls( "OkBtn" )
B.Caption = "Выбрать"
B.Width = 120
B.Left = C.Left + C.Width - B.Width
B.Top = C.Top + C.Height + 10
Call Form.SetControlEvent( "OkBtn", "ObjectClick", "CSDN_Nomenclatures.OnBrowseForFileOkClick" )
Form.Width = 400 + 15
Form.Height = B.Top + B.Height + 40
Form.ShowModal
If Form.ModalResult=1 Then BrowseForFile = C.FileName
End Function
Sub OnBrowseForFileOkClick( Form, ObjName )
If Form.c_FName.FileName="" Then
Call TCSApp.ShowErrorMessage( "Выберите файл!" )
Else
Form.Close( 1 )
End If
End Sub
Sub Test
p = BrowseForFolder( "C:\", "" )
MsgBox "Select path:" + p
p = BrowseForFile( "C:\", "", "Текстовые файлы|*.txt|Ini-файлы|*.ini" )
MsgBox "Select file:" + p
p = CSDN_BrowseForFileForm.CSDNBrowseForFile( "" )
MsgBox "Select file2:" + p
End Sub
Внимание! в данном примере необходимо создать какой нибудь скриптовый модуль, куда положить обработчик от кнопки на форме, созданной непосредственно в коде, после чего исправить код примера. В нашем случае это скриптовый модуль CSDN_Nomenclatures в нем должна быть функция OnBrowseForFileOkClick (тело которой сейчас расположено в этом же примере сейчас) - заменить строку CSDN_Nomenclatures.OnBrowseForFileOkClick
ФОрма ввода для третьего варианта там же https://forum.technologics.ru/post9048.html#p9048