找回密码
 加入
搜索
查看: 7910|回复: 15

[AU3基础] (已解决)请教关于bitand / or之类的实际使用

  [复制链接]
发表于 2010-7-12 15:14:44 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-7-12 15:15:48 | 显示全部楼层
请版主 帮忙删除一份
 楼主| 发表于 2010-7-12 15:16:15 | 显示全部楼层
点完发表 之后没反应 我又点了一次
发表于 2010-7-12 15:16:57 | 显示全部楼层
我已经帮你删了4份了…
 楼主| 发表于 2010-7-12 15:30:52 | 显示全部楼层
咦 我在这里怎么看不到任何回复 但是在我的帖子里 已经看到A版的回复了啊
 楼主| 发表于 2010-7-12 15:32:54 | 显示全部楼层
回复 4# afan


    呵呵 。。。。
I'm Sorry !
在我这边可能是反应太慢的缘故 点击提交后很迟才能看到 没想到都提交了好几次了
不好意思 给你带来麻烦了
发表于 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
        
EndFunc
Func OnButton1_Click();按钮单击
        For $i=1 To 6
                Execute("function"&$i&"("&$chked&")");单击按钮后,每个函数都执行一遍
                ;由于在函数开头有判断,所以没有选中的立即返回,不影响程序速度
        Next
        
EndFunc

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-7-13 16:07:14 | 显示全部楼层
回复 7# akmm88


   太感谢了 正在参考
发表于 2010-7-16 23:30:17 | 显示全部楼层
刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +9 收起 理由
lynfr8 + 9 很棒的见解

查看全部评分

 楼主| 发表于 2010-7-19 09:52:42 | 显示全部楼层
回复 9# pusofalse


    显目 直接 !一看就明白!在下明白了 感谢!
 楼主| 发表于 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
大侠  你觉得 我的代码哪出了问题?
发表于 2010-7-25 17:30:50 | 显示全部楼层
刚才偶然发现这张猛图,楼主看了一定能明白位运算的含义。
pusofalse 发表于 2010-7-16 23:30

哈哈哈,笑死我了{:face (356):}
 楼主| 发表于 2010-7-26 16:31:46 | 显示全部楼层
Tracking !
发表于 2011-5-7 20:59:04 | 显示全部楼层
学习了,楼主
 楼主| 发表于 2011-5-16 17:21:57 | 显示全部楼层
tracking !
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 15:47 , Processed in 0.095073 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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