Code: Select all
EnableExplicit
XIncludeFile "FileSearch.pb"
; Определение языка интерфейса и применение
; Определяет язык ОС
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Global UserIntLang, *Lang
If OpenLibrary(0, "kernel32.dll")
*Lang = GetFunction(0, "GetUserDefaultUILanguage")
If *Lang
UserIntLang = CallFunctionFast(*Lang)
EndIf
CloseLibrary(0)
EndIf
CompilerCase #PB_OS_Linux
Global UserIntLang$
If ExamineEnvironmentVariables()
While NextEnvironmentVariable()
If Left(EnvironmentVariableName(), 4) = "LANG"
; LANG=ru_RU.UTF-8
; LANGUAGE=ru
UserIntLang$ = Left(EnvironmentVariableValue(), 2)
Break
EndIf
Wend
EndIf
CompilerEndSelect
;- Lang
#CountStrLang = 18
Global Dim Lng.s(#CountStrLang)
; En
Lng(0) = "Path"
Lng(1) = "Mask"
Lng(3) = "Depth"
Lng(4) = "Full"
Lng(5) = "Result"
Lng(6) = "TypeMask"
Lng(7) = "0 - relative" + #CRLF$ + "1 - full" + #CRLF$ + "2 - filenames with extension" + #CRLF$ + "3 - filenames without extension"
Lng(8) = "0 - relative" + #CRLF$ + "1 - full"
Lng(9) = "0 - list" + #CRLF$ + "1 - array, a$(0)=number" + #CRLF$ + "2 - array"
Lng(10) = "0 - auto detect" + #CRLF$ + "1 - mask= *.is?|s*.cp*" + #CRLF$ + "2 - Type= tmp|bak|gid"
Lng(11) = "StatusBar"
Lng(12) = "Test"
Lng(13) = "Text delimited by #CRLF$"
Lng(14) = "List to enumerate"
Lng(15) = "Relative"
Lng(16) = "Full path"
Lng(17) = "File names with extension"
Lng(18) = "File names without extension"
; Ru
; если русская локализация, то русский язык
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
If UserIntLang = 1049
CompilerCase #PB_OS_Linux
If UserIntLang$ = "ru"
CompilerEndSelect
Lng(0) = "Путь"
Lng(1) = "Маска"
Lng(3) = "Вложенность"
Lng(4) = "Полный"
Lng(5) = "Результат"
Lng(6) = "Тип маски"
Lng(7) = "0 - относительный" + #CRLF$ + "1 - полный путь" + #CRLF$ + "2 - имена файлов с расширением" + #CRLF$ + "3 - имена файлов без расширения"
Lng(8) = "0 - относительный" + #CRLF$ + "1 - полный путь"
Lng(9) = "0 - список" + #CRLF$ + "1 - массив с количеством элементов" + #CRLF$ + "2 - массив"
Lng(10) = "0 - автоопределение" + #CRLF$ + "1 - маска вида *.is?|s*.cp*" + #CRLF$ + "2 - по типу tmp|bak|gid"
Lng(11) = "Строка состояния"
Lng(12) = "Тест"
Lng(13) = "Текст с разделителем #CRLF$"
Lng(14) = "Список, который перечислять"
Lng(15) = "Относительный"
Lng(16) = "Полный путь"
Lng(17) = "Имена файлов с расширением"
Lng(18) = "Имена файлов без расширения"
EndIf
;- Enumeration
Enumeration
#InputPath
#PathOpen
#InputMask
#ComboDepth
#ComboFull
#StatusBar
#RadioTrue
#RadioFalse
#ComboArr
#ComboTypeMask
#ComboLocale
#InputPathOut
#Test
#txt1
#txt2
#txt3
#txt4
#txt5
#txt6
#txt7
EndEnumeration
Global hGUI
Declare OpenFolder()
Declare Test()
;- GUI
hGUI = OpenWindow(0, 0, 0, 555, 140, "FileSearch", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
; TextGadget(0, 10, 40, 80, 17, Lng(0))
ComboBoxGadget(#InputPath , 10, 10, 505, 30, #PB_ComboBox_Editable)
AddGadgetItem(#InputPath, -1, GetCurrentDirectory())
AddGadgetItem(#InputPath, -1, GetHomeDirectory())
AddGadgetItem(#InputPath, -1, GetTemporaryDirectory())
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_Desktop))
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_Downloads))
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_Documents))
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_ProgramData))
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_AllUserData))
AddGadgetItem(#InputPath, -1, GetUserDirectory(#PB_Directory_Programs))
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
AddGadgetItem(#InputPath, -1, GetEnvironmentVariable("SystemRoot")) ; WinDir
AddGadgetItem(#InputPath, -1, GetEnvironmentVariable("SystemRoot") + "\System32")
CompilerEndIf
SetGadgetState(#InputPath, 2)
ButtonGadget(#PathOpen, 517, 10, 30, 30, Chr($2026))
; GUICtrlSetFont(-1, 16)
; GUICtrlSetOnEvent(-1, "OpenFolder")
; TextGadget(0, 10, 44, 105, 17, LngFunc$)
; ComboFileS$ = ComboBoxGadget("", 10, 60, 135, 23, $3)
TextGadget(#txt1, 10, 44, 150, 17, Lng(1))
ComboBoxGadget(#InputMask, 10, 70, 170, 30, #PB_ComboBox_Editable)
AddGadgetItem(#InputMask, -1, "*")
AddGadgetItem(#InputMask, -1, "*.avi|*.mpg|*.vob|*.wmv|*.mkv|*.mp4")
AddGadgetItem(#InputMask, -1, "*.mov|*.asf|*.asx|*.3gp|*.flv|*.bik")
AddGadgetItem(#InputMask, -1, "*.mp3|*.wav|*.wma|*.ogg|*.ac3")
AddGadgetItem(#InputMask, -1, "*.bak|*.gid|*.log|*.tmp")
AddGadgetItem(#InputMask, -1, "*.htm|*.html|*.css|*.js|*.php")
AddGadgetItem(#InputMask, -1, "*.bmp|*.gif|*.jpg|*.jpeg|*.png|*.tif|*.tiff")
AddGadgetItem(#InputMask, -1, "*.exe|*.msi|*.scr|*.dll|*.cpl|*.ax")
AddGadgetItem(#InputMask, -1, "*.com|*.sys|*.bat|*.cmd")
AddGadgetItem(#InputMask, -1, "avi|mpg|vob|wmv|mkv|mp4")
AddGadgetItem(#InputMask, -1, "mov|asf|asx|3gp|flv|bik")
AddGadgetItem(#InputMask, -1, "mp3|wav|wma|ogg|ac3")
AddGadgetItem(#InputMask, -1, "bak|gid|log|tmp")
AddGadgetItem(#InputMask, -1, "htm|html|css|js|php")
AddGadgetItem(#InputMask, -1, "bmp|gif|jpg|jpeg|png|tif|tiff")
AddGadgetItem(#InputMask, -1, "exe|msi|scr|dll|cpl|ax")
AddGadgetItem(#InputMask, -1, "com|sys|bat|cmd")
SetGadgetState(#InputMask, 5)
TextGadget(#txt3, 180, 44, 100, 22, Lng(3))
ComboBoxGadget(#ComboDepth, 200, 70, 55, 30)
AddGadgetItem(#ComboDepth, -1, "0")
AddGadgetItem(#ComboDepth, -1, "1")
AddGadgetItem(#ComboDepth, -1, "2")
AddGadgetItem(#ComboDepth, -1, "3")
AddGadgetItem(#ComboDepth, -1, "15")
AddGadgetItem(#ComboDepth, -1, "70")
AddGadgetItem(#ComboDepth, -1, "125")
SetGadgetState(#ComboDepth, 6)
TextGadget(#txt4, 290, 44, 60, 22, Lng(4))
ComboBoxGadget(#ComboFull, 290, 70, 50, 30)
AddGadgetItem(#ComboFull, -1, "0 " + Lng(15))
AddGadgetItem(#ComboFull, -1, "1 " + Lng(16))
AddGadgetItem(#ComboFull, -1, "2 " + Lng(17))
AddGadgetItem(#ComboFull, -1, "3 " + Lng(18))
GadgetToolTip(#ComboFull, Lng(7))
SetGadgetState(#ComboFull, 0)
TextGadget(#txt5, 370, 44, 80, 22, Lng(5))
ComboBoxGadget(#ComboArr, 380, 70, 50, 30)
AddGadgetItem(#ComboArr, -1, "0 " + Lng(13))
AddGadgetItem(#ComboArr, -1, "1 " + Lng(14))
GadgetToolTip(#ComboArr, Lng(9))
SetGadgetState(#ComboArr, 0)
TextGadget(#txt6, 460, 44, 90, 22, Lng(6))
ComboBoxGadget(#ComboTypeMask, 470, 70, 50, 30)
AddGadgetItem(#ComboTypeMask, -1, "0 = auto" )
AddGadgetItem(#ComboTypeMask, -1, "1 = *.pb*|*.ico|*.exe" )
AddGadgetItem(#ComboTypeMask, -1, "-1 <> *.pb*|*.ico|*.exe")
AddGadgetItem(#ComboTypeMask, -1, "2 = pb,exe")
AddGadgetItem(#ComboTypeMask, -1, "-2 <> pb,exe")
AddGadgetItem(#ComboTypeMask, -1, "3 = IMG[_\d].jpg")
AddGadgetItem(#ComboTypeMask, -1, "-3 <> IMG[_\d].jpg")
AddGadgetItem(#ComboTypeMask, -1, "4 wildcard")
GadgetToolTip(#ComboTypeMask, Lng(10))
SetGadgetState(#ComboTypeMask, 1)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SendMessage_(GadgetID(#InputMask), #CB_SETDROPPEDWIDTH, 300, 0)
SendMessage_(GadgetID(#ComboFull), #CB_SETDROPPEDWIDTH, 300, 0)
SendMessage_(GadgetID(#ComboArr), #CB_SETDROPPEDWIDTH, 440, 0)
SendMessage_(GadgetID(#ComboTypeMask), #CB_SETDROPPEDWIDTH, 230, 0)
CompilerEndIf
TextGadget(#StatusBar, 5, 110, 390, 26, Lng(11))
ButtonGadget(#Test, 400, 105, 150, 33, Lng(12))
SetActiveGadget(#Test)
;- Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #PathOpen
OpenFolder()
Case #Test
Test()
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver
Procedure OpenFolder()
Protected sPath$ = GetGadgetText(#InputPath)
If FileSize(sPath$) <> -2
sPath$ = "C:\"
EndIf
sPath$ = PathRequester("", sPath$)
If Not Asc(sPath$)
ProcedureReturn
EndIf
SetGadgetText(#InputPath, sPath$)
EndProcedure
Procedure Test()
Protected StartTime, Path0$, Mask0$, Type, depth
Protected NewList Files.s()
Protected LenForTrim, Full, isArr, Len, *Point, Result.String
DisableGadget(#Test, #True)
SetGadgetText(#StatusBar, "...")
Path0$ = GetGadgetText(#InputPath)
LenForTrim = Len(Path0$) + 1
Mask0$ = GetGadgetText(#InputMask)
Full = Val(GetGadgetText(#ComboFull))
isArr = Val(GetGadgetText(#ComboArr))
Type = Val(GetGadgetText(#ComboTypeMask))
depth = Val(GetGadgetText(#ComboDepth))
StartTime = ElapsedMilliseconds()
Select Type
Case 1, -1, 2, -2
Mask0$ = CorrectMask(Mask0$)
EndSelect
FileSearch(Files(), Path0$, Mask0$, Type, depth)
SetGadgetText(#StatusBar, "t=" + Str(ElapsedMilliseconds() - StartTime) + " ms, Count = " + Str(ListSize(Files())))
DisableGadget(#Test, #False)
Select Full
Case 0
ForEach Files()
Files() = Mid(Files(), LenForTrim)
Next
Case 2
ForEach Files()
Files() = GetFilePart(Files())
Next
Case 3
ForEach Files()
Files() = GetFilePart(Files(), #PB_FileSystem_NoExtension)
Next
EndSelect
If isArr
Debug "Count = " + Str(ListSize(Files()))
ForEach Files()
Debug Files()
Next
Else
Len = 0
ForEach Files()
Len + Len(Files()) + 2
Next
Result\s = Space(Len)
*Point = @Result\s
ForEach Files()
CopyMemoryString(Files() + #CRLF$, @*Point)
Next
Debug Result\s
EndIf
EndProcedure