yarsye 发表于 2010-7-12 15:14:44

(已解决)请教关于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

yarsye 发表于 2010-7-12 15:15:48

请版主 帮忙删除一份

yarsye 发表于 2010-7-12 15:16:15

点完发表 之后没反应 我又点了一次

afan 发表于 2010-7-12 15:16:57

我已经帮你删了4份了…

yarsye 发表于 2010-7-12 15:30:52

咦 我在这里怎么看不到任何回复 但是在我的帖子里 已经看到A版的回复了啊

yarsye 发表于 2010-7-12 15:32:54

回复 4# afan


    呵呵 。。。。
I'm Sorry !
在我这边可能是反应太慢的缘故 点击提交后很迟才能看到 没想到都提交了好几次了
不好意思 给你带来麻烦了

akmm88 发表于 2010-7-13 10:19:07

用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

yarsye 发表于 2010-7-13 16:07:14

回复 7# akmm88


   太感谢了 正在参考

pusofalse 发表于 2010-7-16 23:30:17

刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。

yarsye 发表于 2010-7-19 09:52:42

回复 9# pusofalse


    显目 直接 !一看就明白!在下明白了 感谢!

yarsye 发表于 2010-7-25 17:23:35

回复 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大侠你觉得 我的代码哪出了问题?

renxiaoyao 发表于 2010-7-25 17:30:50

刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。
pusofalse 发表于 2010-7-16 23:30 http://www.autoitx.com/images/common/back.gif
哈哈哈,笑死我了{:face (356):}

yarsye 发表于 2010-7-26 16:31:46

Tracking !

浪迹红客 发表于 2011-5-7 20:59:04

学习了,楼主

yarsye 发表于 2011-5-16 17:21:57

tracking !
页: [1] 2
查看完整版本: (已解决)请教关于bitand / or之类的实际使用