Created
October 7, 2013 13:09
-
-
Save killofwin/6867721 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Gambas class file | |
' FileDialogForm | |
' Форма запрашивает имя файла у пользователя давая выбор из определённого каталога | |
' ' | |
Public Sub Form_Open() | |
End | |
Public Function AskFileName(Optional Title As String = "Select file", Optional Path As String = "", Optional TextOK As String = "OK", Optional CancelText As String = "Cancel", Optional MaskFiles As String = "*", Optional PictureFiles As Picture = Null, Optional ArrayMaskFiles As String[] = Null, Optional ArrayPictureFiles As Picture[] = Null, Optional HiddenShow As Boolean = False, Optional Paths As String[] = Null) As String | |
' Функция возвращает имя выбранного файла, | |
Dim r As String | |
Dim OK As Boolean | |
' Установить нужные надписи | |
Me.Text = Title | |
ButtonOK.Text = TextOK | |
ButtonCancel.Text = CancelText | |
RefrashFileList(Title, Path, TextOK, CancelText, MaskFiles, PictureFiles, ArrayMaskFiles, ArrayPictureFiles, HiddenShow, paths) | |
OK = Me.ShowModal() | |
If OK = True Then | |
r = ListFiles.Key | |
Endif | |
Return r | |
End | |
Public Sub RefrashFileList(Optional Title As String = "Select file", Optional Path As String = "", Optional TextOK As String = "OK", Optional CancelText As String = "Cancel", Optional MaskFiles As String = "*", Optional PictureFiles As Picture = Null, Optional ArrayMaskFiles As String[] = Null, Optional ArrayPictureFiles As Picture[] = Null, Optional HiddenShow As Boolean = False, Optional Paths As String[] = Null) | |
' Процедура показывает список файлов, принимает: | |
' Title заголовок окна, Path каталог , TextOK надпись кнопки выбоа файла , CancelText надпись кнопки отмены | |
' MaskFiles маска файла, PictureFiles картинка файла | |
' HiddenShow показывать ли файлы которые начинаються с точки | |
' ArrayMaskFiles массив масок файлов, не должны пересекаться , ArrayPictureFiles массив картинок для каждой маски | |
' Если передано значение типов в виде массива, то параметры MaskFiles и PictureFiles игнорируються | |
Dim FilesList As String[] ' массив для получаемого списка файлов | |
Dim ArrayM As Integer | |
Dim ArrayA As Integer ' переменные счётчиков для массивов | |
Dim ArrayPictureM As Integer | |
Dim m As Integer | |
Dim a As Integer | |
Dim Pic As Picture | |
Dim h As Boolean ' скрытый файл | |
' Для того варианта когда переданно множество путей | |
Dim lMultiPaths As New String[] | |
Dim MultiA As Integer | |
Dim MultiM As Integer | |
If Paths = Null Then | |
' Если не был передан массив с путями | |
' Значит его нужно создать | |
lMultiPaths.Add(Path) ' в качестве 0 элемента массива использовать обычный аргумент Path | |
Else | |
' Передан массив путей | |
lMultiPaths = Null | |
lMultiPaths = Paths.Copy() ' копировать переданный массив в локальный | |
Endif | |
ListFiles.Clear ' очистка списка | |
MultiM = lMultiPaths.Max ' Вычислить колличество путей | |
For MultiA = 0 To MultiM | |
Path = lMultiPaths[MultiA] ' перебор путей по порядку | |
If PictureFiles = Null Then PictureFiles = PictureFile.Picture ' присвоение значения картинки если не передана | |
If Not ArrayMaskFiles = Null Then | |
' передан всё таки массив | |
Endif | |
If ArrayMaskFiles = Null Then | |
' передан не массив | |
ArrayMaskFiles = New String[] ' таки создать массив | |
ArrayPictureFiles = New Picture[] | |
ArrayMaskFiles.Add(MaskFiles) ' присвоение маски | |
ArrayPictureFiles.Add(PictureFiles) ' присвоение картинки | |
Endif | |
If Path = "" Then Path = Application.Path ' путь обычный | |
If Mid(Path, Len(Path), 1) = "/" Then Path = Mid(Path, 2, Len(Path) - 1) ' Если на конце / то убрать | |
If ArrayMaskFiles.Count > 0 Then | |
' В массиве есть маски | |
ArrayPictureM = ArrayPictureFiles.Max ' максимальный индекс картинки | |
ArrayM = ArrayMaskFiles.Max ' максимальный индекс маски | |
For ArrayA = 0 To ArrayM | |
' перечисление массива масок | |
' Костыльное решение, но тсправляет баг из за которого "/" трактуется как "" | |
If Len(Path) > 0 Then FilesList = Dir(Path, ArrayMaskFiles[ArrayA], gb.File) | |
If Len(Path) = 0 Then FilesList = Dir("/", ArrayMaskFiles[ArrayA], gb.File) | |
m = FilesList.Max | |
If FilesList.Count > 0 Then | |
' в списке есть файлы | |
If ArrayA <= ArrayPictureM Then | |
' Массивы совпадают, можно искать | |
If ArrayPictureFiles[ArrayA] = Null Then Pic = PictureFile.Picture ' картинка на тот случай если нет картинки | |
'If Not (ArrayPictureFiles[ArrayA] = Null) Then Print "OK" | |
If Not (ArrayPictureFiles[ArrayA] = Null) Then Pic = ArrayPictureFiles[ArrayA] | |
Endif | |
If ArrayA > ArrayPictureM Then | |
'список картинок меньше. Массивы не совпадают. | |
Pic = PictureFile.Picture ' картинка на тот случай если нет картинки | |
Endif | |
For a = 0 To m | |
' добавление файлов из массива в список | |
h = False | |
If Mid(FilesList[a], 1, 1) = "." Then | |
' имя файла начинается с точки, значит файл скрытый | |
h = True | |
Endif | |
If HiddenShow Or (h = False) Then | |
'Если разрешено показывать скрытые файлы или если файл не скрытый | |
ListFiles.Add(Path & "/" & FilesList[a], FilesList[a], Pic, "") | |
End If | |
'Print ArrayA | |
Next | |
Endif | |
Next | |
Endif | |
Next | |
' список заполнен | |
End | |
Public Sub ButtonCancel_Click() | |
Me.Close(False) | |
End | |
Public Sub ButtonOK_Click() | |
Me.Close(True) | |
End | |
Public Sub ListFiles_DblClick() | |
ButtonOK_Click() | |
End | |
Public Sub Form_Resize() | |
' Форма изменяет размеры | |
FilesSplit.Height = Me.Height - ButtonHSplit.Height - 4 | |
ButtonHSplit.Y = Me.Height - ButtonHSplit.Height | |
FilesSplit.Width = Me.Width | |
ButtonHSplit.Width = Me.Width | |
End |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment