afan
发表于 2009-8-13 20:22:06
删除你可是指定一个总目录删了,又不是一个个去删的,这就无法知道它删到多少了,也就无法计算进度了~
我看你的 del() 是删除所有 mp3-1 至 mp3-1000 的文件夹,最多能走进度的只能是计算有几个 mp3- ,然后删掉了一个就走 1/几个 ,如果有多个 mp3- 还好看点,如果只一个那就一下走到头了。。。
水木子
发表于 2009-8-13 22:09:59
本帖最后由 水木子 于 2009-8-13 22:11 编辑
afan前辈真的太谦虚了,这么厉害还称自己是新手,简直让我们这些新人无地自容啊!
真正的高手都这么低调。
今后还请前辈多多指教啊!
xavier880819
发表于 2009-8-14 09:20:57
但是我的想法是,既然创建了那么多文件夹,文件夹总数总是一样的,如果一个个递减,是不是也可以表达删除的效果?只是不知道时间能不能同步。
afan
发表于 2009-8-14 10:42:57
那你可以试试“一个个递减”啊
xavier880819
发表于 2009-8-14 11:22:13
94# afan
我试过了的,我尝试使用ywcc=ywcc-1. 但是,现在的问题是我的尝试不成功。就算是能够成功,我还担心时间能不能够和删除的时间同步的问题。
afan
发表于 2009-8-14 12:00:47
ywcc=ywcc-1 这能行吗,这只是开始生成文件夹时传递的一个变量而已...
如果你实在要做这个进度,我看只能用 DirGetSize() 随时查看文件夹目前的数量。
afan
发表于 2009-8-14 12:07:16
不过DirGetSize() 首次调用是需要一定时间的,自己衡量取舍吧
另外,建议不要做两个进度条,删除的进度就在原进度条逆行不更好
xavier880819
发表于 2009-8-14 13:38:19
97# afan
还能逆行??这么好的方法??怎么弄啊??能够逆行的话当然再多做一个要好很多啊!!
afan
发表于 2009-8-14 13:49:34
本帖最后由 afan 于 2009-8-14 14:02 编辑
例子:#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
GUICreate("我的 GUI 进度条", 220, 100, 100, 200)
$progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20, $PBS_SMOOTH)
GUICtrlSetData(-1, 100)
$button = GUICtrlCreateButton("开始倒退", 75, 70, 70, 20)
GUISetState()
$s = 0; progressbar-saveposition
Do
$msg = GUIGetMsg()
If $msg = $button Then
For $i = $s To 100
$m = GUIGetMsg()
If $m = -3 Then ExitLoop
GUICtrlSetData($progressbar2, (100 - $i))
Sleep(20)
Next
Msgbox(0,0,'完成',2)
GUICtrlSetData($progressbar2, 100)
EndIf
Until $msg = $GUI_EVENT_CLOSE
xavier880819
发表于 2009-8-14 14:45:59
99# afan
谢谢afan,这样也挺好的,我去尝试一下
afan
发表于 2009-8-14 17:25:18
修改了几处,让删除时使原进度条依据第1层文件夹的数量逆行。 Case $Button1
$h = MsgBox(1 + 48, 'Attention', 'Are you sure you want to Delete all the folders ?')
Select
Case $h = 1
Dim $jn = 1
$gmld = GUICtrlRead($gml)
If $gmld = '' Then $gmld = @ScriptDir
Del()
AdlibDisable()
Sleep(300)
MsgBox(64, 'Finish', 'You have deleted all the folders! ')
Case $h = 2
ContinueLoop
EndSelect
Func Del()
Dim $wjjzs = 0, $num = 1
Do
$wjjs = FileExists($gmld & '\' & 'MP3-' & $jn)
If $wjjs = 0 Then ExitLoop
$jn += 1
Until $wjjs = 0
$jn -= 1
AdlibEnable("jdtj", 1000)
Do
If DirRemove($gmld & '\' & 'MP3-' & $num, 1) = 0 Then ExitLoop
$num += 1
Until 0
EndFunc ;==>Del
Func jdtj()
Dim $jn1 = $jn, $sys = 0
Do
$wjjs = FileExists($gmld & '\' & 'MP3-' & $jn1)
If $wjjs = 0 Then ExitLoop
$jn1 -= 1
$sys += 1
Until @error = 1
GUICtrlSetData($jdt, $sys / $jn * 100)
GUICtrlSetData($xs, $sys / $jn *$zs & '/' & $zs)
EndFunc ;==>jdtj
hao1926
发表于 2009-8-14 20:13:39
这个多层文件夹生成工具不错!
xavier880819
发表于 2009-8-17 13:41:29
hi, afan这样确实已经很不错了。
还记得上次我问过你那个enable和disable的问题吗??我其实目的是想在每层后面都加一个enable和disable 的按钮,从而达到想在层复制文件和不想在哪层复制文件都可以在UI上面操作。
但是直接把button设置成enable或者disable好像不可以哦?
afan
发表于 2009-8-17 13:46:54
不用加什么 ENABLE 开关,每层加个复选框>复制文件前面加个判断是否勾选>勾选就复制
xavier880819
发表于 2009-8-17 14:32:50
104# afan
这个主意也挺好,怎么弄呢??谢谢你!