|
本帖最后由 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,鼠标移动到非第一个分页标签上的按钮上,按钮会被穿透,直接显示为第一个分页标签上对应的按钮,这个问题也想不出思路,求高人解答。 |
|