骗子 发表于 2012-7-11 18:45:37

抄袭搞了个简单的抽奖程序,现在有两个问题比较迷惑,内详【已解决】

本帖最后由 骗子 于 2012-7-13 15:14 编辑

界面生成抄袭了http://www.autoitx.com/thread-33380-1-1.html中水木子的脚本,自己的东西非常少,代码如下,我的问题也在代码中用注释的方法标注出来了
问题1答案在2楼
问题2解决方案在14楼
谢谢各位的帮助


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $aButNum ;按钮总数
Global $iNumber = 20 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 30 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)
;~ GUICreate('抽奖程序,空格键停止', 1050, 650)
GUICreate('抽奖程序,空格键停止', $iSpacingX * Mod(399, $iNumber) + 100, $iSpacingY * Floor(399 / $iNumber) + 75)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
        $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 30,-1, $WS_EX_STATICEDGE)
        GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
                For $x = 3 To 402;这里为什么不是 0 toUBound($aButNum) - 1
                        GUICtrlSetState($x, $GUI_FOCUS) ;有什么方法可以只让激活的按钮变的显眼一点?
                        GUICtrlSetBkColor($x, 0x00ff00) ;我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
                        GUICtrlSetBkColor($x - 1, 0x00ffff)
;~                         Sleep()
                Next
WEnd
Func _ButtonEvents()       
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum To $aButNum
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents

user3000 发表于 2012-7-11 18:56:18

回复 1# 骗子 For $x = 3 To 403; 所有GUI控件都是从 3 开始 ; 应该是 403 结束!Case $aButNum To $aButNum
                       GUICtrlSetBkColor($x-1, 0xFF0000)
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum + 1)
                        GUICtrlSetBkColor($x-1, 0x00ff00)

骗子 发表于 2012-7-11 21:46:35

回复骗子
user3000 发表于 2012-7-11 18:56 http://www.autoitx.com/images/common/back.gif

这个是实现了中奖的突出显示,如何实现在循环跑的时候实现激活的按钮背景色突出显示呢

afan 发表于 2012-7-11 21:57:03

回复 3# 骗子


    sleep(10)以下,跑得太快,人的眼睛是有视觉暂留的。动画就是这个原理

水木子 发表于 2012-7-11 22:01:09

这么快就用上啦!不错,不过要灵活运用才行哦!再接再厉吧!

骗子 发表于 2012-7-11 22:06:10

回复 4# afan

好像不是眼睛的问题,A版可以试下我的脚本,没有SLEEP的时候多按几次空格或者回车

水木子 发表于 2012-7-11 22:15:28

叫我木子就行了,水版是另一位版主,不要搞错了。

另外你的问题我没看明白,不知道你要实现什么样的效果。

水木子 发表于 2012-7-11 22:26:06

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $aButNum ;按钮总数
Global $iNumber = 20 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 30 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)
;~ GUICreate('抽奖程序,空格键停止', 1050, 650)
GUICreate('抽奖程序,空格键停止', $iSpacingX * Mod(399, $iNumber) + 100, $iSpacingY * Floor(399 / $iNumber) + 75)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
        $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 30, -1, $WS_EX_STATICEDGE)
        GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
While 1
        For $x = 3 To 402 ;这里为什么不是 0 toUBound($aButNum) - 1
                GUICtrlSetState($x, $GUI_FOCUS) ;有什么方法可以只让激活的按钮变的显眼一点?
                GUICtrlSetBkColor($x - 1, 0x00ffff)
                GUICtrlSetBkColor($x, 0x00ff00) ;我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
        Next
WEnd
Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum To $aButNum
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents

user3000 发表于 2012-7-11 22:35:41


好像不是眼睛的问题,A版可以试下我的脚本,没有SLEEP的时候多按几次空格或者回车

调一下语句的顺序.
想循环跑时,突出激活按钮, 也是调整这里的颜色, 应该用别的对比突出的颜色.原来背景色用青色太显眼了. 自己测试确定颜色吧.
下面代码是用灰色, 气氛不太合适.GUICtrlSetState($x, $GUI_FOCUS)
GUICtrlSetBkColor($x - 1, 0xC0C0C0f)
GUICtrlSetBkColor($x, 0xff0000)

骗子 发表于 2012-7-11 22:38:42

本帖最后由 骗子 于 2012-7-11 22:40 编辑

回复 8# 水木子
语文太差了,可能描述不清楚:
就是想实现一个绿色的框(或者其他的凸出显示的方法)在这400个按钮中来回跑,按下空格或者回车的时候就弹框说明现在在哪个按钮上,此时应该只有这个按钮的颜色是凸显的。

user3000 发表于 2012-7-11 22:38:46

回复 7# 水木子

那位似乎更喜欢别人叫他'水哥'或'吹水哥', 哈哈!

骗子 发表于 2012-7-11 22:49:01

这个问题估计是因为执行顺序产生的,估计是正好执行到更改颜色的那步的时候按了回车,直接跳到弹框的子程序那,后面的没执行,我在3句脚本中加了延时就更明显了。

GUICtrlSetState($x, $GUI_FOCUS)
                Sleep (1000)
                GUICtrlSetBkColor($x - 1, 0xC0C0C0f)
                Sleep (1000)
                GUICtrlSetBkColor($x, 0xff0000);我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
                Sleep (1000)

水木子 发表于 2012-7-11 22:54:25

回复 9# user3000

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $aButNum ;按钮总数
Global $iNumber = 20 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 30 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)

GUICreate('抽奖程序,空格键停止', $iSpacingX * Mod(399, $iNumber) + 100, $iSpacingY * Floor(399 / $iNumber) + 75)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
        $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 30, -1, $WS_EX_STATICEDGE)
        GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
Dim $iX = $aButNum

While 1
        GUICtrlSetState($iX, $GUI_FOCUS) ;有什么方法可以只让激活的按钮变的显眼一点?
        GUICtrlSetBkColor($iX - 1, 0x00ffff)
        GUICtrlSetBkColor($iX, 0x00ff00) ;我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
        If $iX = $aButNum Then $iX = $aButNum
        $iX += 1
;~         Sleep(250)       
WEnd
Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum To $aButNum
                        GUICtrlSetBkColor(@GUI_CtrlId, 0x00ff00)
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents

骗子 发表于 2012-7-11 23:01:23

这次应该没问题了,在弹框之前修改临近3各的颜色

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $aButNum ;按钮总数
Global $iNumber = 20 ;每行按钮数量
Global $iSpacingX = 50, $iSpacingY = 30 ;垂直、水平,间距
Opt('GUIOnEventMode', 1)

GUICreate('抽奖程序,空格键停止', $iSpacingX * Mod(399, $iNumber) + 100, $iSpacingY * Floor(399 / $iNumber) + 75)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButNum) - 1
        $aButNum[$i] = GUICtrlCreateButton($i + 1, $iSpacingX * Mod($i, $iNumber) + 25, $iSpacingY * Floor($i / $iNumber) + 25, 50, 30, -1, $WS_EX_STATICEDGE)
        GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()
Dim $iX = $aButNum

While 1
        GUICtrlSetState($iX, $GUI_FOCUS) ;有什么方法可以只让激活的按钮变的显眼一点?
        GUICtrlSetBkColor($iX - 1, 0x00ffff)
        GUICtrlSetBkColor($iX, 0x00ff00) ;我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
        If $iX = $aButNum Then $iX = $aButNum
        $iX += 1
;~      Sleep(250)
WEnd
Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum To $aButNum
                        GUICtrlSetBkColor(@GUI_CtrlId - 1, 0x00ffff)
                        GUICtrlSetBkColor(@GUI_CtrlId + 1, 0x00ffff)
                        GUICtrlSetBkColor(@GUI_CtrlId, 0x00ff00)
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents

骗子 发表于 2012-7-11 23:03:50

如果这个没问题的话那接下来就是对与已经选中过的按钮执行跳过操作,已经选中了的按钮颜色不动,也不会再被选中,明天琢磨这个。
页: [1] 2
查看完整版本: 抄袭搞了个简单的抽奖程序,现在有两个问题比较迷惑,内详【已解决】