找回密码
 加入
搜索
查看: 1861|回复: 3

[效率算法] 关于批量创建分页标签并在分页标签上批量创建按钮的一些问题

[复制链接]
发表于 2017-2-26 12:24:23 | 显示全部楼层 |阅读模式
本帖最后由 jj119120 于 2017-2-27 10:20 编辑

问题2已解决  之前思路误区了   非得一行代码解决问题   没想过分开计算标签上的数字就好了   也感谢2#的建议

2月26日源码如下
Global $aButNum[50] ;按钮总数
Global $iNumber = 5 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 35 ;垂直、水平,间距

Opt('GUIOnEventMode', 1)

GUICreate('循环创建按钮', 300, 300)
GUICtrlCreateTab(10, 10, 280, 280)
GUISetOnEvent(-3, '_ButtonEvents')
If UBound($aButNum) <= 25 Then
        GUICtrlCreateTabItem(1 & "-" & UBound($aButNum))
        For $i = 0 To UBound($aButNum) - 1
                $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 20, $iSpacingY * Floor($i / $iNumber) + 40, 30, 30) ;生成按钮
                GUICtrlSetOnEvent(-1, '_ButtonEvents')
                GUICtrlCreateTabItem("")
        Next
ElseIf UBound($aButNum) > 25 Then
        ;MsgBox(0, 1, Ceiling(UBound($aButNum) / 25))
        For $z = 0 To Ceiling(UBound($aButNum) / 25) - 1
                GUICtrlCreateTabItem($z * 25 + 1 & "-" & ($z + 1) * 25)
                For $i = $z * 25 To ($z + 1) * 25 - 1
                        $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 20, $iSpacingY * Floor($i / $iNumber) - $z * 175 + 40, 30, 30) ;生成按钮
                        GUICtrlSetOnEvent(-1, '_ButtonEvents')
                        If $i = 0 Then GUICtrlCreateTabItem("")
                Next
        Next
EndIf
GUISetState()

While 1
        Sleep(250)
WEnd

Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum[0] To $aButNum[UBound($aButNum) - 1]
                        MsgBox(0, '', '按钮 - ' & @GUI_CtrlId - $aButNum[0] + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents
问题1:目前这个源码只能创建25的倍数按钮,例如50个按钮就可以,假设要创建55个,源码会在$aButNum[$i]这里报错,分析了一下,应该是这里($z + 1) * 25 - 1写的不对,按照这样写就是创建99个按钮了,那么怎样写才能创建非25倍数的按钮?

问题2:【已解决】GUICtrlCreateTabItem($z * 25 + 1 & "-" & ($z + 1) * 25)这句也是在25的倍数下可以,假设按钮数为55情况下如何让最后一个分页标签显示为51-55?

问题3:鼠标移动到非第一个分页标签上的按钮上,按钮会被穿透,直接显示为第一个分页标签上对应的按钮,这个问题如何解决?


2月27日源码如下
Global $aButNum[55] ;按钮总数
Global $iNumber = 5 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 35 ;垂直、水平,间距
Global $z, $anniu

Opt('GUIOnEventMode', 1)

GUICreate('循环创建按钮', 300, 300)
GUICtrlCreateTab(10, 10, 280, 280)
GUISetOnEvent(-3, '_ButtonEvents')     ;设置关闭退出
If UBound($aButNum) <= 25 Then         ;按钮数低于25直接创建标签和按钮
        GUICtrlCreateTabItem(1 & "-" & UBound($aButNum))   ;创建标签1-n(n<25)
        For $i = 0 To UBound($aButNum) - 1    ;i=0到n(n<25)
                $anniu[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 20, $iSpacingY * Floor($i / $iNumber) + 40, 30, 30) ;生成按钮
                GUICtrlSetOnEvent(-1, '_ButtonEvents')    ;设置点击按钮效果
                GUICtrlCreateTabItem("")      ;设置当前标签为显示标签
        Next
ElseIf UBound($aButNum) > 25 Then       ;按钮数大于25创建标签和按钮
        For $z = 0 To (Floor(UBound($aButNum) / 10) * 10) / 25 - 1    ;z=0到n能被25整除的部分减1,小数不要
                GUICtrlCreateTabItem($z * 25 + 1 & "-" & ($z + 1) * 25)    ;创建能被25整除部分的标签
        Next
        GUICtrlCreateTabItem((Floor(UBound($aButNum) / 10) * 10) + 1 & "-" & UBound($aButNum))    ;创建不能被25整除部分的标签
        For $i = $z * 25 To ($z + 1) * 25 - 1       ;创建能被25整除部分的按钮
                $anniu[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 20, $iSpacingY * Floor($i / $iNumber) - $z * 175 + 40, 30, 30) ;生成按钮
                GUICtrlSetOnEvent(-1, '_ButtonEvents')    ;设置点击按钮效果
                If $i = 0 Then GUICtrlCreateTabItem("")     ;设置i=0时那页标签为显示标签
        Next
        For $x = (Floor(UBound($aButNum) / 10) * 10) To UBound($aButNum)   ;创建不能被25整除部分的按钮
                $anniu[$x] = GUICtrlCreateButton($x + 1, $iSpacingX * Mod($x, $iNumber) + 20, $iSpacingY * Floor($x / $iNumber) - ((Floor(UBound($aButNum) / 10) * 10) / 25 + 1) * 175 + 40, 30, 30) ;生成按钮
                GUICtrlSetOnEvent(-1, '_ButtonEvents')      ;设置点击按钮效果
        Next
EndIf
GUISetState()

While 1
        Sleep(250)
WEnd

Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $anniu[0] To $anniu[UBound($aButNum) - 1]
                        MsgBox(0, '', '按钮 - ' & @GUI_CtrlId - $aButNum[0] + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents
27日代码解决了标签的问题,试着用解决标签的思路, 分开生成按钮。先生成能被25整除部分的按钮,再生成余下的。  但直接报错,报错如下,不知道哪里有问题。
--> 点击 Ctrl+Alt+Break 重新启动, 或 Ctrl+Break 停止脚本执行
"C:\Users\Administrator\Desktop\?? AutoIt3 ?? (9).au3" (35) : ==> ?????????????.:
$anniu[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 20, $iSpacingY * Floor($i / $iNumber) - $z * 175 + 40, 30, 30)
$anniu^ ERROR
还有之前的问题3,鼠标移动到非第一个分页标签上的按钮上,按钮会被穿透,直接显示为第一个分页标签上对应的按钮,这个问题也想不出思路,求高人解答。
发表于 2017-2-26 19:20:11 | 显示全部楼层
第1个标签页是从按钮0开始的,结束是24
第2个标签页是从按钮25开始的,结束是49
...
第$Z(最后一个)个标签页是的按钮是从$Z*25开始的,结束当然是按钮总数$aButNum啊,你算半天算的什么???

菜鸟表示只大概看了一下代码,以上纯属胡说,如果雷同,纯属巧合...
 楼主| 发表于 2017-2-27 01:35:16 | 显示全部楼层
回复 2# 邪恶海盗
当然知道是$aButNum但是怎么写才能让他自动生成标签并计算标签上的数字   这才是问题啊
 楼主| 发表于 2017-2-27 10:21:37 | 显示全部楼层
27日更新源码  解决标签问题
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 19:24 , Processed in 0.079894 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表