超级死人 发表于 2012-6-11 23:05:53

这样的学术讨论真是让人舒心...必须标记.

魔导 发表于 2012-6-12 13:55:06

大神们都聚集了,打包膜拜..........
纯膜拜(小弟看不懂)

lchl0588 发表于 2012-6-12 16:27:49

本帖最后由 lchl0588 于 2012-6-12 18:16 编辑

回复 1# 131738
先看下代码#AutoIt3Wrapper_au3check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)
;-------------自个添加部分-------
Dim $a, $Limiter = 5;这个就是规定范围数.....
;-----------------结束-------------
_Main()

Func _Main()
        Local $listview, $hImage
        Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)

        GUICreate("ImageList AddIcon", 400, 300)
        $listview = GUICtrlCreateListView("", 2, 2, 394, 268, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
        _GUICtrlListView_SetExtendedListViewStyle($listview, $exStyles)
        GUISetState()
        ;-----------------代码来自UDF 中“_GUIImageList_AddIcon ”-------------
        ; 加载图像
        $hImage = _GUIImageList_Create(16, 16, 5, 3)
        $a = _GUIImageList_AddIcon($hImage, @DesktopDir & "\ico1.dll", 1, True)
        ;@DesktopDir & "\ico.dll 存在,那$a=0 成立;不存在则不成立,那运行 If Not $a=0Then 内的代码

        For $1 = 0 To 6 ;有趣的地方:如果$a=0成立时,修改下 To 后面的数测试下,还有不成立会出什么情况呢?多试就知道了
                If $a = 0 Then ; 条件成立时,运行下面(也就是$a中DLL文件存在才成立)
                        $Limiter = $Limiter - 1 ;这里规定循环次数 也就是 $1 or $Limiter(不知理解是否有误?)
                        If $Limiter < 1 Then ExitLoop
                EndIf
               
                If Not $a = 0 Then
                        MsgBox(0,"不成立","看到这几个字就说明 含有图标的dll文件没找到,同时不带图标按照 to后的次数决定"&@CR&"还有点几次“确定”是不是与TO后的数+1=的数相同?")
                EndIf
                _GUICtrlListView_SetImageList($listview, $hImage, 1)
                ; 添加列
                _GUICtrlListView_AddColumn($listview, "Column 1", 120)
                ; 添加项目
                _GUICtrlListView_AddItem($listview, "Row 1: Col 1", 0)
                _GUICtrlListView_AddItem($listview, "Row 2: Col 2", 1)
        Next
        ; 循环至用户退出
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main
然后再说下上述代码$a的部分:True 与False 的区别,如下图:




这是纠正后测试的结果图

131738 发表于 2012-6-12 17:16:47

本帖最后由 131738 于 2012-6-12 17:17 编辑

回复131738
先看下代码:然后再说下上述代码$a的部分:True 与False 的区别,如下图:
lchl0588 发表于 2012-6-12 16:27 http://www.autoitx.com/images/common/back.gif

谢谢你的代码,更谢谢你热心!!!
1.附件无图标
2.这个循环只是重复添加,重复次数视 To 后的设置而定(不知是否理解有误)

问题:要求一次完成 dll 文件的图标添加,不需重复添加(这个无使用需要)
不知你看了我 18 楼的截图没有?
运行原代码,循环远超图标实际总数还在继续循环,似乎不达一千万次不罢休!
6 分钟循环 10 万次,完成一千万次大约 10 小时吧!没试这个,不知循环完成后的结果!应该会出现图标吧。。。。
总之,我觉得原循环代码肯定是错误的!但作者能做出如此大的程序,最后发表的代码肯定经过 N 多次调试,真不知这其中的缘故!

再次谢谢你的热心回帖!!!

131738 发表于 2012-6-12 17:25:12

回复131738
先看下代码:然后再说下上述代码$a的部分:True 与False 的区别,如下图:
lchl0588 发表于 2012-6-12 16:27 http://www.autoitx.com/images/common/back.gif

什么系统或工具?图2,图3的红色提示不会是另做的提示框吧。。。。。

afan 发表于 2012-6-12 17:29:52

回复 34# 131738


    原作肯定是有问题的,或者说是不严谨的。21#、23# 难道没看(⊙_⊙)?

lchl0588 发表于 2012-6-12 17:34:55

回复 34# 131738
第一条:附件是ICO.DLL文件,方便测试而已,也可以用shell32.dll代替 上传的原因是在测试过程中弄明白true与false之间的区别!!!
第二条:恩,理解正确!TO后的数字是这段代码运行的次数! 但$a=0这个条件只决定图标选取的个数!!!TO后的一次,是运行$a=0中整个图标图!

lchl0588 发表于 2012-6-12 17:45:53

本帖最后由 lchl0588 于 2012-6-12 18:11 编辑

回复 35# 131738
不好意思,测试过程中,不断纠正时截的图,代码已完善些,有误请指正!!!!!!!!!

131738 发表于 2012-6-12 18:59:56

回复131738


    原作肯定是有问题的,或者说是不严谨的。21#、23# 难道没看(⊙_⊙)?
afan 发表于 2012-6-12 17:29 http://www.autoitx.com/images/common/back.gif

呵呵。。。。我的帖子,回复必看的。。。。

xx44t10 发表于 2012-6-12 20:30:13

虽然不是很明白 。这贴得回啊。。

131738 发表于 2012-6-12 21:14:22

回复131738
不好意思,测试过程中,不断纠正时截的图,代码已完善些,有误请指正!!!!!!!!!
lchl0588 发表于 2012-6-12 17:45 http://www.autoitx.com/images/common/back.gif

再次谢谢!!!

afan 发表于 2012-6-12 22:28:13

lchl0588 很热心,不过,似乎总能将简单的问题解释得很复杂,哈~

原作是用_GUIImageList_AddIcon() 添加图标进图像列表的,但 _GUIImageList_AddIcon 函数内部其实是调用的 api 函数: _WinAPI_ExtractIconEx(),但似乎作者不知?或者不知道 _WinAPI_ExtractIconEx($imagefile, -1, 0, 0, 0) 就可以获得图标的总数?所以来了个 For $iCntRow = 0 To 9999999 的循环查询图标及总数。而又担心索引号的不连续(或做工不精致?)又加了个 $Limiter = 5 来安慰下可能会受伤5次的心… 还重复实际上只需调用一次的 _GUICtrlListView_SetImageList()。在我这个菜鸟看来这些都是多余的。
用_WinAPI_ExtractIconEx() 先获取图标总数,再在总数范围内循环调用内部使用 _WinAPI_ExtractIconEx() 索引机制的 _GUIImageList_AddIcon() ,无需理会其返回值是0还是-1,不会多一个,也不会少一个。

131738 发表于 2012-6-12 22:39:23

lchl0588 很热心,不过,似乎总能将简单的问题解释得很复杂,哈~

原作是用_GUIImageList_AddIcon() 添加 ...
afan 发表于 2012-6-12 22:28 http://www.autoitx.com/images/common/back.gif

我就是用 _WinAPI_ExtractIconEx($imagefile, -1, 0, 0, 0) 修改原循环后发布了汉化版的,
而且修改的代码也传给了作者,作者回复意为“应该退出循环的,嗯。。。。”倒是没否定我的
修改,相反否定了 happytc 帮助修改的另一个关于文件复制的代码,真不理解作者。。。。

afan 发表于 2012-6-12 22:47:51

回复 43# 131738

happytc 的水平应该不会在其下,或许比德国佬更高~
那个复制文件的代码有点多余小瑕疵:
            If @error Then
                Return SetError(@error, 2, 0)
                Return 0 ;多余
      Else
                If $aRet Then
                        Return SetError($aRet, 1, 0)
                        Return 0 ;多余

131738 发表于 2012-6-13 01:02:26

回复131738

happytc 的水平应该不会在其下,或许比德国佬更高~
那个复制文件的代码有点多余小瑕疵: ...
afan 发表于 2012-6-12 22:47 http://www.autoitx.com/images/common/back.gif

呵呵。。。还真没注意这个多余。。。。
页: 1 2 [3] 4
查看完整版本: [已解决]看不懂的 If 循环。。。。。。