(已解决)请教关于bitand / or之类的实际使用
本帖最后由 yarsye 于 2010-7-26 16:31 编辑现有函数1,2,3,4,5,6
每个函数都可以单独正常运行
想法是:做个GUI 让用户自己选择其中任意组合 然后点击开始
让我迟迟不知所错的是 这用户任意组合 函数1+2/函数1+2+3... 之间怎么衔接?
注:
已解决,是用3smile的 readcheck 函数 搞定的 ,感谢3smile
未解决的是bitand / or 之类的实际使用 我还是很少会用 因为没有真正掌握
Func readcheck()
For $i = 1 To 3
$ch = "box" & $i
If GUICtrlRead(Eval($ch)) = $GUI_UNCHECKED Then MsgBox(0, 0, $ch & '没选择')
If GUICtrlRead(Eval($ch)) = $GUI_CHECKED Then MsgBox(0, 0, $ch & '已选择')
Next
EndFunc ;==>readcheck 请版主 帮忙删除一份 点完发表 之后没反应 我又点了一次 我已经帮你删了4份了… 咦 我在这里怎么看不到任何回复 但是在我的帖子里 已经看到A版的回复了啊 回复 4# afan
呵呵 。。。。
I'm Sorry !
在我这边可能是反应太慢的缘故 点击提交后很迟才能看到 没想到都提交了好几次了
不好意思 给你带来麻烦了 用GUICtrlCreateCheckbox创建6个复选框,1个按钮
$chkbox1-$chkbox6
让用户选择.
点击按钮后.循环读出复选框是否选中.$chked=0
For $i=1 To 6 ;6个checkbox循环6次
If GUICtrlRead (Eval("$chkbox"&$i))=$GUI_CHECKED Then ;checkbox 是否选中
$chked=$chked+BitShift (1, 1-$i );注1
EndIf
Next
;注1
;BitShift 将1左移 也就是说, 每移一次值*2
;这样 checkbox1=1 checkbox2=2 checkbox3=4 checkbox4=8 checkbox5=16 checkbox6=32
;如果选中 1和2 那么 $chked=3 如果选中 1 3 6 那么$chked=1+4+32=37我们已经可以得到客户选中了哪几个了.接下来要在每个函数开头加个判断.
当然还有其他方法.func function1($ch) ;这个$ch就是如上所说$chked的值,当然你可以直接用全局变量.
If BitAND($ch,1)=0 Then
Return
EndIf
EndFunc
func function2($ch)
If BitAND($ch,2)=0 Then
Return
EndIf
EndFunc
func function3($ch)
If BitAND($ch,4)=0 Then ;每次*2,类推
Return
EndIf
EndFuncFunc OnButton1_Click();按钮单击
For $i=1 To 6
Execute("function"&$i&"("&$chked&")");单击按钮后,每个函数都执行一遍
;由于在函数开头有判断,所以没有选中的立即返回,不影响程序速度
Next
EndFunc 回复 7# akmm88
太感谢了 正在参考 刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。
回复 9# pusofalse
显目 直接 !一看就明白!在下明白了 感谢! 回复 7# akmm88 #include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)
Global $box1, $msg ,$ok,$button1,$box2,$checked,$i,$box3,$ch,$chked
$ch= 0
GUICreate("My GUI Checkbox")
$box1 = GUICtrlCreateCheckbox("box1", 10, 10, 120, 20)
$box2 = GUICtrlCreateCheckbox("box2",10,30,120,20)
$box3 = GUICtrlCreateCheckbox("box3", 10, 50, 120 ,20)
$button1=GUICtrlCreateButton("button1",120,120,120,20)
GUISetState()
GUICtrlSetOnEvent($button1,"ok")
;GUICtrlSetOnEvent($box1,"func1")
For $i = 1 To 2
If GUICtrlRead (Eval("$chkbox"&$i)) = $GUI_CHECKED Then
$ch = $ch + BitShift (1,1-$i )
EndIf
Next
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func ok()
For $i = 1 To 2
Execute ("func"&$i&"("&$ch&")")
Next
EndFunc
Func func1($ch)
If BitAND($ch,1) = 0 Then
MsgBox(0,$ch,"2")
Return
EndIf
EndFunc
Func func2($ch)
If BitAND($ch,2) = 0 Then
MsgBox(0,$ch,"3")
Return
EndIf
EndFunc
Func func3($ch)
If BitAND($ch,5) = 0 Then
MsgBox(0,$ch,"4")
Return
EndIf
EndFunc大侠你觉得 我的代码哪出了问题? 刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。
pusofalse 发表于 2010-7-16 23:30 http://www.autoitx.com/images/common/back.gif
哈哈哈,笑死我了{:face (356):} Tracking ! 学习了,楼主 tracking !
页:
[1]
2