找回密码
 加入
搜索
查看: 13084|回复: 25

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

 火.. [复制链接]
发表于 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[400] ;按钮总数
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 to  UBound($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[0] To $aButNum[UBound($aButNum) - 1]
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum[0] + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents
发表于 2012-7-11 18:56:18 | 显示全部楼层
回复 1# 骗子
  For $x = 3 To 403  ; 所有GUI控件都是从 3 开始 ; 应该是 403 结束!
Case $aButNum[0] To $aButNum[UBound($aButNum) - 1]
                         GUICtrlSetBkColor($x-1, 0xFF0000)
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum[0] + 1)
                        GUICtrlSetBkColor($x-1, 0x00ff00)

评分

参与人数 1金钱 +60 收起 理由
骗子 + 60 谢谢,学习了

查看全部评分

 楼主| 发表于 2012-7-11 21:46:35 | 显示全部楼层
回复  骗子
user3000 发表于 2012-7-11 18:56


这个是实现了中奖的突出显示,如何实现在循环跑的时候实现激活的按钮背景色突出显示呢
发表于 2012-7-11 21:57:03 | 显示全部楼层
回复 3# 骗子


    sleep(10)以下,跑得太快,人的眼睛是有视觉暂留的。动画就是这个原理
发表于 2012-7-11 22:01:09 | 显示全部楼层
这么快就用上啦!不错,不过要灵活运用才行哦!再接再厉吧!

评分

参与人数 1金钱 +10 收起 理由
骗子 + 10 谢谢水版

查看全部评分

 楼主| 发表于 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[400] ;按钮总数
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 to  UBound($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[0] To $aButNum[UBound($aButNum) - 1]
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum[0] + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents

评分

参与人数 1金钱 +10 收起 理由
骗子 + 10 这个会偶尔出现选中按钮颜色和其他的一样的 ...

查看全部评分

发表于 2012-7-11 22:35:41 | 显示全部楼层
好像不是眼睛的问题,A版可以试下我的脚本,没有SLEEP的时候多按几次空格或者回车

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

评分

参与人数 1金钱 +10 收起 理由
骗子 + 10 和8楼水木子的方法一样,但是会出现10楼的问 ...

查看全部评分

 楼主| 发表于 2012-7-11 22:38:42 | 显示全部楼层
本帖最后由 骗子 于 2012-7-11 22:40 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 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[400] ;按钮总数
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[0]

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

评分

参与人数 1金钱 +10 收起 理由
骗子 + 10 会出现6楼图片中的情况

查看全部评分

 楼主| 发表于 2012-7-11 23:01:23 | 显示全部楼层
这次应该没问题了,在弹框之前修改临近3各的颜色

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $aButNum[400] ;按钮总数
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[0]

While 1
        GUICtrlSetState($iX, $GUI_FOCUS) ;有什么方法可以只让激活的按钮变的显眼一点?
        GUICtrlSetBkColor($iX - 1, 0x00ffff)
        GUICtrlSetBkColor($iX, 0x00ff00) ;我试了这两件命令行,但是运行过程中如果延时调到10以下可能会出现相邻的两个按钮变成绿色
        If $iX = $aButNum[UBound($aButNum) - 1] Then $iX = $aButNum[0]
        $iX += 1
;~      Sleep(250)
WEnd
Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButNum[0] To $aButNum[UBound($aButNum) - 1]
                        GUICtrlSetBkColor(@GUI_CtrlId - 1, 0x00ffff)
                        GUICtrlSetBkColor(@GUI_CtrlId + 1, 0x00ffff)
                        GUICtrlSetBkColor(@GUI_CtrlId, 0x00ff00)
                        MsgBox(0, '', '中奖序号为 :' & @GUI_CtrlId - $aButNum[0] + 1)
        EndSwitch
EndFunc   ;==>_ButtonEvents
 楼主| 发表于 2012-7-11 23:03:50 | 显示全部楼层
如果这个没问题的话那接下来就是对与已经选中过的按钮执行跳过操作,已经选中了的按钮颜色不动,也不会再被选中,明天琢磨这个。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-27 20:09 , Processed in 0.090920 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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