找回密码
 加入
搜索
查看: 3190|回复: 12

[AU3基础] 无奈技术太差还得向高手请教—关于全选

  [复制链接]
发表于 2011-4-24 16:57:23 | 显示全部楼层 |阅读模式
#Include <Constants.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <TabConstants.au3>
#Include <WindowsConstants.au3>
If FileExists(@ScriptDir & "\Tab.ini") = 0 Then
        MsgBox(64 + 0, "错误!", "请将配置文件放置于" & @ScriptDir & "\Tab.ini 再运行!")
        Exit
EndIf
Dim $q = 0
Dim $Pic[5]
Dim $with = 60
If $q >= 4 Then
        Dim $max = $q
Else
        Dim $max = 4
EndIf
Dim $Check[$max + 1]
GUICreate('MyGUI', 705, 409)
GUISetBkColor(0xFFFFFF)
GUICtrlCreatePic('img_bg.bmp', 0, 0, 705, 369)
GUICtrlSetState(-1, $GUI_DISABLE)

For $i = 0 To $max
        $Pic[$i] = GUICtrlCreatePic(@ScriptDir & '\img_black.bmp', 10, 24 + 50 * $i, 162, 49)
        GUICtrlCreateLabel('Tabsheet' & $i, 21, 40 + 50 * $i, 140, 18, $SS_CENTER)
        GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma')
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetcolor(-1, 0xFFFFFF)
Next

$Tab = GUICtrlCreateTab(172 + 4, 10 + 4, 523 - 8, 349 - 8)
GUICtrlSetState(-1, $GUI_DISABLE)
For $t = 0 To $max
GUICtrlCreateTabItem('Tabsheet' & $t)
For $i = 1 To $max
        $Check[$i] = GUICtrlCreateCheckbox("", 182, 51 + $with * ($i - 1), 13, 13);建立Checkbox
    If IniRead(@ScriptDir & "\Tab.ini", "tab" & $t, "Checkbox" & $i, "") = 1 Then
                GUICtrlSetState($Check[$i], $GUI_CHECKED)
        EndIf

Next
Next
GUICtrlCreateTabItem('')
$Label1 = GUICtrlCreateLabel("0", 23, 382, 100, 14)
$Checkbox1 = GUICtrlCreateCheckbox(" 全选/不选", 326, 382, 80, 14)

GUISetState()

$Item = -1
$Over = -1

While 1
        $Info = GUIGetCursorInfo()
        If @error Then
                If $Over <> -1 Then
                        GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                EndIf
                $Over = -1
        Else
                $Index = _Index($Info[4])
                If $Index <> $Over Then
                        If $Over <> -1 Then
                                GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                        EndIf
                        If ($Index <> -1) And ($Index <> $Item) Then
                                GUICtrlSetImage($Pic[$Index], @ScriptDir & '\img_over.bmp')
                                $Over = $Index
                        Else
                                $Over = -1
                        EndIf
                EndIf
        EndIf
        $Msg = GUIGetMsg()
        If $Item = -1 Then
                $Msg = $Pic[0]
                $Item = 1
        EndIf
        Switch $Msg
                Case 0
                        ContinueLoop
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Pic[0] To $Pic[UBound($Pic) - 1]
                        If $Msg <> $Pic[$Item] Then
                                GUICtrlSetImage($Pic[$Item], @ScriptDir & '\img_black.bmp')
                                GUICtrlSetcolor($Pic[$Item] + 1, 0xFFFFFF)
                                GUICtrlSetImage($Msg, @ScriptDir & '\img_white.bmp')
                                GUICtrlSetcolor($Msg + 1, 0x313A42)
                                $Item = _Index($Msg)
                                GUICtrlSendMsg($Tab, $TCM_SETCURFOCUS, $Item, 0)
                                $Over = -1
                                $Label1 = GUICtrlCreateLabel(GUICtrlRead($tab), 23, 382, 100, 14)
                        EndIf
                Case $Checkbox1
                        Beep(1000, 50)
                        all()
        EndSwitch
WEnd

Func _Index($CtrlID)
        For $i = 0 To UBound($Pic) - 1
                If ($CtrlID = $Pic[$i]) Or ($CtrlID = $Pic[$i] + 1) Then
                        Return $i
                EndIf
        Next
        Return -1
EndFunc   ;==>_Index

Func all()
        $B = GUICtrlRead($Label1)
        For $i = 1 To $max
                If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                                IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "1")
                                GUICtrlSetState($Check[$i], $GUI_CHECKED)
                Else
                        GUICtrlSetState($Check[$i], $GUI_UNCHECKED)
                        IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "")
                EndIf
        Next
       
EndFunc   ;==>all

ini 文件的读取和写入都没问题,但就是切换标签后,点击“全选/不选“后,Checkbox 不会随之变化,我想问题就出在 Func all()
这一块的。可由于刚学AU3 水平有限,还请高手不吝赐教!

本帖子中包含更多资源

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

×
发表于 2011-4-24 18:12:11 | 显示全部楼层
netegg有篇文章可以看看不知道对你帮助大部大
http://www.autoitx.com/forum.php ... 1%A1%2B%B7%B4%D1%A1
 楼主| 发表于 2011-4-24 22:03:01 | 显示全部楼层
真遗憾,无人解我心中烦忧,耐心等候ing...
发表于 2011-4-24 22:44:27 | 显示全部楼层
笨办法!主要还是你的代码逻辑有点乱,同一个数组进行了多次赋值。

#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

If FileExists(@ScriptDir & "\Tab.ini") = 0 Then
        MsgBox(64 + 0, "错误!", "请将配置文件放置于" & @ScriptDir & "\Tab.ini 再运行!")
        Exit
EndIf
Dim $q = 0
Dim $Pic[5]
Dim $with = 60
Dim $x, $y
If $q >= 4 Then
        Dim $max = $q
Else
        Dim $max = 4
EndIf
Global $Check[$max + 1]
GUICreate('MyGUI', 705, 409)
GUISetBkColor(0xFFFFFF)
GUICtrlCreatePic('img_bg.bmp', 0, 0, 705, 369)
GUICtrlSetState(-1, $GUI_DISABLE)

For $i = 0 To $max
        $Pic[$i] = GUICtrlCreatePic(@ScriptDir & '\img_black.bmp', 10, 24 + 50 * $i, 162, 49)
        GUICtrlCreateLabel('Tabsheet' & $i, 21, 40 + 50 * $i, 140, 18, $SS_CENTER)
        GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma')
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetColor(-1, 0xFFFFFF)
Next

$Tab = GUICtrlCreateTab(172 + 4, 10 + 4, 523 - 8, 349 - 8)
GUICtrlSetState(-1, $GUI_DISABLE)
For $t = 0 To $max
        GUICtrlCreateTabItem('Tabsheet' & $t)
        For $i = 1 To $max
                $Check[$i] = GUICtrlCreateCheckbox("", 182, 51 + $with * ($i - 1), 13, 13);建立Checkbox
                If IniRead(@ScriptDir & "\Tab.ini", "tab" & $t, "Checkbox" & $i, "") = 1 Then
                        GUICtrlSetState($Check[$i], $GUI_CHECKED)
                EndIf
                If $x  =  '' Then $x  =  $Check[1]
        Next
Next
$y = $Check[$max]

GUICtrlCreateTabItem('')
$Label1 = GUICtrlCreateLabel("0", 23, 382, 100, 14)
$Checkbox1 = GUICtrlCreateCheckbox(" 全选/不选", 326, 382, 80, 14)

GUISetState()

$Item = -1
$Over = -1

While 1
        $Info = GUIGetCursorInfo()
        If @error Then
                If $Over <> -1 Then
                        GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                EndIf
                $Over = -1
        Else
                $Index = _Index($Info[4])
                If $Index <> $Over Then
                        If $Over <> -1 Then
                                GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                        EndIf
                        If ($Index <> -1) And ($Index <> $Item) Then
                                GUICtrlSetImage($Pic[$Index], @ScriptDir & '\img_over.bmp')
                                $Over = $Index
                        Else
                                $Over = -1
                        EndIf
                EndIf
        EndIf
        $Msg = GUIGetMsg()
        If $Item = -1 Then
                $Msg = $Pic[0]
                $Item = 1
        EndIf
        Switch $Msg
                Case 0
                        ContinueLoop
                Case -3
                        Exit
                Case $Pic[0] To $Pic[UBound($Pic) - 1]
                        If $Msg <> $Pic[$Item] Then
                                GUICtrlSetImage($Pic[$Item], @ScriptDir & '\img_black.bmp')
                                GUICtrlSetColor($Pic[$Item] + 1, 0xFFFFFF)
                                GUICtrlSetImage($Msg, @ScriptDir & '\img_white.bmp')
                                GUICtrlSetColor($Msg + 1, 0x313A42)
                                $Item = _Index($Msg)
                                GUICtrlSendMsg($Tab, $TCM_SETCURFOCUS, $Item, 0)
                                $Over = -1
                                $Label1 = GUICtrlCreateLabel(GUICtrlRead($Tab), 23, 382, 100, 14)
                        EndIf
                Case $Checkbox1
                        ;Beep(1000, 50)
                        all()
        EndSwitch
WEnd

Func _Index($CtrlID)
        For $i = 0 To UBound($Pic) - 1
                If ($CtrlID = $Pic[$i]) Or ($CtrlID = $Pic[$i] + 1) Then
                        Return $i
                EndIf
        Next
        Return -1
EndFunc   ;==>_Index

Func all()
        $B = GUICtrlRead($Label1)
        For $i = $x To $y
                If GUICtrlRead($Checkbox1) = 1 Then
                        ;IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "1")
                        GUICtrlSetState($i, 1)
                Else
                        GUICtrlSetState($i, 4)
                        ;IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "")
                EndIf
        Next
EndFunc   ;==>all
发表于 2011-4-25 21:02:04 | 显示全部楼层
我也来研究下
 楼主| 发表于 2011-4-25 22:20:44 | 显示全部楼层
感谢水木子大侠出手相助,但我不得不遗憾的说,这段代码虽然解决了全选的问题,但是tab标签失效了,无论点击哪个tab页效果都是一样的,还有无法写入ini文件,稍作修改后虽然也能写入,但是格式乱了。
尽管如此,我还是要感谢水木子大侠,毕竟给了我一个新的思路。
愿更多的大侠能参与进来。谢谢!
 楼主| 发表于 2011-4-27 10:03:15 | 显示全部楼层
无人帮助还是不屑一顾
 楼主| 发表于 2011-4-27 10:03:31 | 显示全部楼层
无人帮助还是不屑一顾
发表于 2011-4-27 10:22:40 | 显示全部楼层
说实话 代码需整理
#Include <Constants.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <TabConstants.au3>
#Include <WindowsConstants.au3>
If FileExists(@ScriptDir & "\Tab.ini") = 0 Then
        MsgBox(64 + 0, "错误!", "请将配置文件放置于" & @ScriptDir & "\Tab.ini 再运行!")
        Exit
EndIf
Dim $q = 0
Dim $Pic[5]
Dim $with = 60
If $q >= 4 Then
        Dim $max = $q
Else
        Dim $max = 4
EndIf
Dim $Check[$max+1][$max + 1]
GUICreate('MyGUI', 705, 409)
GUISetBkColor(0xFFFFFF)
GUICtrlCreatePic('img_bg.bmp', 0, 0, 705, 369)
GUICtrlSetState(-1, $GUI_DISABLE)
For $i = 0 To $max
        $Pic[$i] = GUICtrlCreatePic(@ScriptDir & '\img_black.bmp', 10, 24 + 50 * $i, 162, 49)
        GUICtrlCreateLabel('Tabsheet' & $i, 21, 40 + 50 * $i, 140, 18, $SS_CENTER)
        GUICtrlSetFont(-1, 11, 400, 0, 'Tahoma')
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetcolor(-1, 0xFFFFFF)
Next
$Tab = GUICtrlCreateTab(172 + 4, 10 + 4, 523 - 8, 349 - 8)
GUICtrlSetState(-1, $GUI_DISABLE)
For $t = 0 To $max
GUICtrlCreateTabItem('Tabsheet' & $t) 
For $i = 1 To $max
        $Check[$t][$i] = GUICtrlCreateCheckbox("", 182, 51 + $with * ($i - 1), 13, 13);建立Checkbox
    If IniRead(@ScriptDir & "\Tab.ini", "tab" & $t, "Checkbox" & $i, "") = 1 Then
                GUICtrlSetState($Check[$t][$i], $GUI_CHECKED)
        EndIf

Next
Next
GUICtrlCreateTabItem('')
$Label1 = GUICtrlCreateLabel("0", 23, 382, 100, 14)
$Checkbox1 = GUICtrlCreateCheckbox(" 全选/不选", 326, 382, 80, 14)

GUISetState()

$Item = -1
$Over = -1

While 1
        $Info = GUIGetCursorInfo()
        If @error Then
                If $Over <> -1 Then
                        GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                EndIf
                $Over = -1
        Else
                $Index = _Index($Info[4])
                If $Index <> $Over Then
                        If $Over <> -1 Then
                                GUICtrlSetImage($Pic[$Over], @ScriptDir & '\img_black.bmp')
                        EndIf
                        If ($Index <> -1) And ($Index <> $Item) Then
                                GUICtrlSetImage($Pic[$Index], @ScriptDir & '\img_over.bmp')
                                $Over = $Index
                        Else
                                $Over = -1
                        EndIf
                EndIf
        EndIf
        $Msg = GUIGetMsg()
        If $Item = -1 Then
                $Msg = $Pic[0]
                $Item = 1
        EndIf
        Switch $Msg
                Case 0
                        ContinueLoop
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Pic[0] To $Pic[UBound($Pic) - 1]
                        If $Msg <> $Pic[$Item] Then
                                GUICtrlSetImage($Pic[$Item], @ScriptDir & '\img_black.bmp')
                                GUICtrlSetcolor($Pic[$Item] + 1, 0xFFFFFF)
                                GUICtrlSetImage($Msg, @ScriptDir & '\img_white.bmp')
                                GUICtrlSetcolor($Msg + 1, 0x313A42)
                                $Item = _Index($Msg)
                                GUICtrlSendMsg($Tab, $TCM_SETCURFOCUS, $Item, 0)
                                $Over = -1
                                $Label1 = GUICtrlCreateLabel(GUICtrlRead($tab), 23, 382, 100, 14)
                        EndIf
                Case $Checkbox1
                        Beep(1000, 50)
                        all()
        EndSwitch
WEnd

Func _Index($CtrlID)
        For $i = 0 To UBound($Pic) - 1
                If ($CtrlID = $Pic[$i]) Or ($CtrlID = $Pic[$i] + 1) Then
                        Return $i
                EndIf
        Next
        Return -1
EndFunc   ;==>_Index

Func all()
        $B =GUICtrlRead($Label1)
        For $i = 1 To $max
                If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                                IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "1")
                                GUICtrlSetState($Check[$B][$i], $GUI_CHECKED)
                Else
                        GUICtrlSetState($Check[$B][$i], $GUI_UNCHECKED)
                        IniWrite(@ScriptDir & "\Tab.ini", "tab" & $B, "Checkbox" & $i, "")
                EndIf
        Next
        
EndFunc   ;==>all
发表于 2011-4-27 19:08:46 | 显示全部楼层
哈哈,学习了。
发表于 2011-4-28 04:47:47 | 显示全部楼层
不是不想帮,是没看懂你什么意思
发表于 2011-5-6 10:26:17 | 显示全部楼层
我只能來學學人家的邏輯,自己沒有多少時間仔細看了
发表于 2011-5-7 10:53:54 | 显示全部楼层
现在看见代码就烦。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 08:00 , Processed in 0.082092 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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