#include <GUIConstantsEx.au3> #include <StaticConstants.au3> Global $Stack[50], $Stack1[50], $a, $BL, $List='' GUICreate("Графический просмотр каталога", 380, 410, -1, -1, -1, 0x00000010) $StatusBar = GUICtrlCreateLabel('Строка состояния AZJIO 2010.06.16', 5, 410 - 20, 370, 20, $SS_LEFTNOWORDWRAP) $CatchDrop = GUICtrlCreateLabel(" кинь сюда каталог", 0, 0, 380, 17, $SS_SUNKEN) GUICtrlSetState(-1, 8) $CatchDrop1 = GUICtrlCreateLabel("", 0, 20, 380, 360) GUICtrlSetState(-1, 136) $BL=GUICtrlCreateButton ("L", 360 ,24,18,18) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = -13 If StringInStr(FileGetAttrib(@GUI_DragFile), "D") = 0 Then MsgBox(0, "Мелкая ошибка", 'Перетаскивайте каталог, а не файл.') ContinueLoop Else GUICtrlDelete($CatchDrop1) ;GUICtrlDelete($BL) GUICtrlDelete($a) _Create() EndIf Case $msg = $BL MsgBox(0, 'Список файлов', $List) Case $msg = -3 Exit EndSelect WEnd Func _Create() GUICtrlSetData($CatchDrop, @GUI_DragFile) $a = GUICtrlCreateGraphic(10, 20, 360, 360) GUICtrlSetState(-1, 8) ;подсчёт общего размера файлов FileFindNextFirst(@GUI_DragFile) $Size4=DirGetSize(@GUI_DragFile,2) $size4 = $Size4 / 360 $Size = 0 While 1 $tempname = FileFindNext('', 0, 1) If $tempname = "" Then ExitLoop $Size5= FileGetSize($tempname) If $Size5<$size4 Then ContinueLoop $k=Floor($Size5/$size4) ;$Size5=$size4*$k $Size += $size4*$k WEnd $size2 = $Size / 360 ; количество байт приходящихся на один градус ;создание графика $nach = 0 $kol000 = 0 $List='' FileFindNextFirst(@GUI_DragFile) While 1 $tempname = FileFindNext('', 0, 1) If $tempname = "" Then ExitLoop $Size5= FileGetSize($tempname) If $Size5<$size2 Then ContinueLoop $k=$Size5/$size4 $grad = Floor($Size5/$size2) ; угол файла (ширина сектора) GUICtrlSetGraphic($a, $GUI_GR_COLOR, 0, Dec(Random(50, 99, 1) & Random(50, 99, 1) & Random(50, 99, 1))) ; цвет сектора GUICtrlSetGraphic($a, $GUI_GR_PIE, 180, 180, 180, $nach, $grad) ; создание сектора $kol000 += 1 ; If $kol000<7 Then ; GUICtrlCreateLabel($kol000, (90+$kol000*14)*cos($nach)+190, (90+$kol000*14)*sin($nach)+200, 10, 14) ; GUICtrlSetTip(-1, $tempname) ; EndIf $nach += $grad ; начальный угол отсчёта (смещение, сдвиг) $List&=$kol000&') '&StringRegExpReplace($tempname, '(^.*)\\(.*)$', '\2')&@CRLF WEnd GUICtrlSetGraphic($a, $GUI_GR_REFRESH) GUICtrlSetData($StatusBar, 'Размер ' & Ceiling($Size / 1024 / 1024) & ' Мб колич ' & $kol000 & ' путь ' & @GUI_DragFile) GUICtrlSetTip($CatchDrop,$List) EndFunc ;==>_Create ;======================================== ; функция поиска всех файлов в каталоге (NIKZZZZ+мод_AZJIO) Func FileFindNextFirst($FindCat) $Stack[0] = 1 $Stack1[1] = $FindCat $Stack[1] = FileFindFirstFile($FindCat & "\*.*") Return $Stack[1] EndFunc ;==>FileFindNextFirst Func FileFindNext($type = 'log', $mode = 0, $Level = 49) While 1 $file = FileFindNextFile($Stack[$Stack[0]]) If @error Then FileClose($Stack[$Stack[0]]) If $Stack[0] = 1 Then Return "" Else $Stack[0] -= 1 ContinueLoop EndIf Else If StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then If $Stack[0] = $Level Then ContinueLoop $Stack[0] += 1 $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*") If $mode = 2 Then Return $Stack1[$Stack[0]] Else ContinueLoop EndIf Else If $mode = 2 Then ContinueLoop If $mode = 1 Then If StringInStr(';' & $type & ';', ';' & StringRight($Stack1[$Stack[0]] & "\" & $file, 3) & ';') = 0 Then ContinueLoop Else Return $Stack1[$Stack[0]] & "\" & $file EndIf Else Return $Stack1[$Stack[0]] & "\" & $file EndIf EndIf EndIf WEnd EndFunc ;==>FileFindNext |