Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Проблема с функцией для отметки всех галочек (http://forum.oszone.net/showthread.php?t=184945)

Centrinar 08-09-2010 16:02 1491134

Проблема с функцией для отметки всех галочек
 
Вложений: 1
Есть скрипт отображающий кол-во программ в системе, сделал кнопку "Отметить все", по идеи при нажатии на нее должны отметиться все чекбоксы но не тут то было, он ничего не отмечает. Помогите разобраться и поправить скрипт. Ини файл необходимый для работы скрипта прикреплен к теме. СПАСИБО!
Код:


#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIScrollbars_Ex.au3>

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Global $params = StringRegExp(IniRead("conf.ini","Params","main",0),"<(.*?)>",3)
Global $anCheckBoxes1[$params[0] + 1]
Global $aCheckedIcons1[$params[0] + 1]
Global $aUnCheckedIcons1[$params[0] + 1]
Global $aCompleteIcons1[$params[0] + 1]
Global $aInstalledIcons1[$params[0] + 1]

$hGUI = GUICreate("My GUI Tab", 852, 650)
GUISetBkColor(0xc64444)

Global $progs[$params[0]+1]
$progs[0]=$params[0]
        For $i=1 To $progs[0] Step 1
$parse = StringRegExp(IniRead("conf.ini","Params","prog"&$i,"<de.exe><INI file ?><0>"),"<(.*?)>",3)
$hChild_Ctrls1 = _SetProgrs_Proc("images", $parse[1], $anCheckBoxes1, $aCheckedIcons1, $aUnCheckedIcons1, $aInstalledIcons1, $aCompleteIcons1)
Next

GUICtrlCreateTabItem("")
$nStart = GUICtrlCreateButton("Выполнить", 640, 560, 150, 30)
$btn1 = GUICtrlCreateButton ("отметить все", 260,  50, 130, 30)

GUISetState(@SW_SHOW, $hGUI)
While 1
        $nMsg = GUIGetMsg()
       
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $btn1
                        For $i=1 To $params[0]
                        $aArray = $anCheckBoxes1[$i]
              GUICtrlSetState ($aArray[1],$GUI_CHECKED)
                          Next
                Case $nStart
               
        EndSwitch
WEnd

Func _SetProgrs_Proc($sIconsPath, $aProgs, ByRef $anCheckBoxes, ByRef $aCheckedIcons, ByRef $aUnCheckedIcons, ByRef $aInstalledIcons, ByRef $aCompleteIcons)
        Local $iTop = 40, $iLeft = 40, $iTop2 = 60
       
        Local $hChild_Ctrls = GUICreate("", 760, 400, 20, 100, $WS_CHILD, -1, $hGUI)
        GUISetBkColor(0xc64444)
       
For $i=1 To $progs[0]
                $aCheckedIcons[$i] = $sIconsPath & "\01.ico"
                $aUnCheckedIcons[$i] = $sIconsPath & "\01.ico"
                $aInstalledIcons[$i] = $sIconsPath & "\03.ico"
                $aCompleteIcons[$i] = $sIconsPath & "\02.ico"
                $parse = StringRegExp(IniRead("conf.ini","Params","prog"&$i,"<de.exe><INI file ?><0>"),"<(.*?)>",3)
                $anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($parse[1], '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons[$i])
                $iTop += 80
                $iTop2 += 80
Next
       
        If $iTop > 370 Then
                _GUIScrollbars_Generate($hChild_Ctrls, 0, $iTop, 0, 0, 1)
        EndIf
       
        GUISetState(@SW_SHOW, $hChild_Ctrls)
        GUISwitch($hGUI)
       
        Return $hChild_Ctrls
EndFunc

Func _CheckProgrs_Proc($hChild_Ctrls, $aProgs, $anCheckBoxes, $aCheckedIcons, $aUnCheckedIcons, $aInstalledIcons, $aCompleteIcons)
        Local $aCheckBox, $iScrollPos
       
        For $i = 1 To $aProgs[0]
                $aCheckBox = $anCheckBoxes[$i]
               
                If GUICtrlRead($aCheckBox[1]) = 1 Then
                        $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                        $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')
                       
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aInstalledIcons[$i])
                        MsgBox(64, $sProgName, "zz", 3)
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aCompleteIcons[$i])
                Else
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
        Next
EndFunc

Func _SwitchTabs_Proc($iTab, $iMode = -1)
        Switch $iTab
                Case 0
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls2)
                                GUISetState(@SW_SHOW, $hChild_Ctrls1)
                        EndIf
                       
                        ControlFocus($hChild_Ctrls1, "", "")
                Case 1
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls1)
                                GUISetState(@SW_SHOW, $hChild_Ctrls2)
                        EndIf
                       
                        ControlFocus($hChild_Ctrls2, "", "")
        EndSwitch
EndFunc

Func _GUICtrlSetImageEx($hWnd, $nCtrlID, $sFileName, $iIconName = "", $iIconType = 0)
        Local $iScrollPage, $iScrollPos
       
        $iScrollPage = _GUIScrollBars_GetScrollInfoPage($hWnd, $SB_VERT)
       
        If $iScrollPage > 0 Then
                $iScrollPos = _GUIScrollBars_GetScrollPos($hWnd, $SB_VERT)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, 0)
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iScrollPos)
        Else
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
        EndIf
EndFunc

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
        Local $aRetArr[2]
       
        $aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft - 20, $iTop - 1, 16, 16)
        GUICtrlSetState($aRetArr[0], $GUI_DISABLE)
       
        $aRetArr[1] = GUICtrlCreateCheckbox($sText, $iLeft, $iTop, $iWidth, $iHeight)
        GUICtrlSetBkColor($aRetArr[1], 0xc64444)
       
        Return $aRetArr
EndFunc


Creat0R 08-09-2010 16:54 1491165

Заголовок в таком случае должен звучать так:
Цитата:

Как сделать функцию для отметки всех галочек?
На данный момент заголовок слишком общий.




Скрипт (в какой раз) нерабочий. В архиве мог бы прикрепить всё что необходимо для его работы, иначе пропадает желание рыться в коде и на угад пыттаться выявить проблему.

Во-первых, StringRegExp возвращает массив где первое значение попадает сразу в нулевой элемент, поэтому и цикл нужно начинать сразу с 0-я а не с 1-цы.
Во-вторых, если сделать вышесказанное, то скрипт ругается на ошибку массивности переменной $aArray, и правильно делает, т.к я например не понимаю смысл в том чтобы прокручивать цикл для одного массива, а проверять другой. Это хороший рецепт к краху скрипта.

Вот так вроде должно работать, но у меня не работает, хотябы потому что нарушено создание элементов (нет иконок):

Код:

#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIScrollbars.au3>

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Global $params = StringRegExp(IniRead(@DesktopDir & "\conf.ini", "Params", "main", 0), "<(.*?)>", 3)
Global $iParams = UBound($params)+1

Global $anCheckBoxes1[$iParams + 1]
Global $aCheckedIcons1[$iParams + 1]
Global $aUnCheckedIcons1[$iParams + 1]
Global $aCompleteIcons1[$iParams + 1]
Global $aInstalledIcons1[$iParams + 1]

$hGUI = GUICreate("My GUI Tab", 852, 650)
GUISetBkColor(0xc64444)

Global $progs[$iParams+1]
$progs[0] = $iParams

For $i = 1 To $progs[0] Step 1
        $parse = StringRegExp(IniRead("conf.ini", "Params", "prog" & $i, "<de.exe><INI file ?><0>"), "<(.*?)>", 3)
        $hChild_Ctrls1 = _SetProgrs_Proc("images", $parse[1], $anCheckBoxes1, $aCheckedIcons1, $aUnCheckedIcons1, $aInstalledIcons1, $aCompleteIcons1)
Next

GUICtrlCreateTabItem("")
$nStart = GUICtrlCreateButton("Выполнить", 640, 560, 150, 30)
$btn1 = GUICtrlCreateButton("отметить все", 260, 50, 130, 30)

GUISetState(@SW_SHOW, $hGUI)
While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $btn1
                        For $i = 1 To UBound($anCheckBoxes1)-1
                                $aArray = $anCheckBoxes1[$i]
                                GUICtrlSetState($aArray[1], $GUI_CHECKED)
                        Next
                Case $nStart

        EndSwitch
WEnd

Func _CheckProgrs_Proc($hChild_Ctrls, $aProgs, $anCheckBoxes, $aCheckedIcons, $aUnCheckedIcons, $aInstalledIcons, $aCompleteIcons)
        Local $aCheckBox, $iScrollPos

        For $i = 1 To $aProgs[0]
                $aCheckBox = $anCheckBoxes[$i]

                If GUICtrlRead($aCheckBox[1]) = 1 Then
                        $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                        $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')

                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aInstalledIcons[$i])
                        MsgBox(64, $sProgName, "zz", 3)
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aCompleteIcons[$i])
                Else
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
        Next
EndFunc  ;==>_CheckProgrs_Proc

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile = "", $nIconIndex = 0)
        Local $aRetArr[2]

        $aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft - 20, $iTop - 1, 16, 16)
        GUICtrlSetState($aRetArr[0], $GUI_DISABLE)

        $aRetArr[1] = GUICtrlCreateCheckbox($sText, $iLeft, $iTop, $iWidth, $iHeight)
        GUICtrlSetBkColor($aRetArr[1], 0xc64444)
       
        Return $aRetArr
EndFunc  ;==>_GUICtrlCreateCheckboxEx

Func _GUICtrlSetImageEx($hWnd, $nCtrlID, $sFileName, $iIconName = "", $iIconType = 0)
        Local $iScrollPage, $iScrollPos

        $iScrollPage = _GUIScrollBars_GetScrollInfoPage($hWnd, $SB_VERT)

        If $iScrollPage > 0 Then
                $iScrollPos = _GUIScrollBars_GetScrollPos($hWnd, $SB_VERT)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, 0)
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iScrollPos)
        Else
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
        EndIf
EndFunc  ;==>_GUICtrlSetImageEx

Func _SetProgrs_Proc($sIconsPath, $aProgs, ByRef $anCheckBoxes, ByRef $aCheckedIcons, ByRef $aUnCheckedIcons, ByRef $aInstalledIcons, ByRef $aCompleteIcons)
        Local $iTop = 40, $iLeft = 40, $iTop2 = 60

        Local $hChild_Ctrls = GUICreate("", 760, 400, 20, 100, $WS_CHILD, -1, $hGUI)
        GUISetBkColor(0xc64444)

        For $i = 1 To $progs[0]
                $aCheckedIcons[$i] = $sIconsPath & "\01.ico"
                $aUnCheckedIcons[$i] = $sIconsPath & "\01.ico"
                $aInstalledIcons[$i] = $sIconsPath & "\03.ico"
                $aCompleteIcons[$i] = $sIconsPath & "\02.ico"
                $parse = StringRegExp(IniRead("conf.ini", "Params", "prog" & $i, "<de.exe><INI file ?><0>"), "<(.*?)>", 3)
                $anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($parse[1], '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons[$i])
                $iTop += 80
                $iTop2 += 80
        Next

        If $iTop > 370 Then
                _GUIScrollbars_Generate($hChild_Ctrls, 0, $iTop, 0, 0, 1)
        EndIf
       
        GUISetState(@SW_SHOW, $hChild_Ctrls)
        GUISwitch($hGUI)

        Return $hChild_Ctrls
EndFunc  ;==>_SetProgrs_Proc

Func _SwitchTabs_Proc($iTab, $iMode = -1)
        Switch $iTab
                Case 0
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls2)
                                GUISetState(@SW_SHOW, $hChild_Ctrls1)
                        EndIf

                        ControlFocus($hChild_Ctrls1, "", "")
                Case 1
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls1)
                                GUISetState(@SW_SHOW, $hChild_Ctrls2)
                        EndIf

                        ControlFocus($hChild_Ctrls2, "", "")
        EndSwitch
EndFunc  ;==>_SwitchTabs_Proc


Centrinar 08-09-2010 17:07 1491178

ругаеться на функцию _GUIScrollbars_Generate т.е. на ее отсутствие... Хм проблема в том что он видет всего один элемент из ини файла, хотя их там 3

Creat0R 08-09-2010 17:26 1491186

Цитата:

Цитата Centrinar
ругаеться на функцию _GUIScrollbars_Generate »

Это шутка? и у меня ругается, я же написал:
Цитата:

Цитата Creat0R
Скрипт (в какой раз) нерабочий »

мне пришлось заменить #include <GUIScrollbars_Ex.au3> на #include <GUIScrollbars.au3>.

Цитата:

Цитата Centrinar
проблема в том что он видет всего один элемент из ини файла, хотя их там 3 »

Да тут вообще обработка неправильная, зачем там RegExp когда имеется структура Ini, Ini* функций чем не угодили?

Creat0R 08-09-2010 19:20 1491247

Centrinar, посмотрю, а что с заголовком?

Centrinar 08-09-2010 19:30 1491255

Исправил)))

Creat0R 08-09-2010 19:36 1491257

Centrinar,
Вобщем я не знаю какое тут назначение у скрипта, но у меня так вышло:

Код:

#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIScrollbars_Ex.au3>

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Global $params = StringRegExp(IniRead("conf.ini", "Params", "main", 0), "<(.*?)>", 3)
Global $anCheckBoxes1[$params[0] + 1]
Global $aCheckedIcons1[$params[0] + 1]
Global $aUnCheckedIcons1[$params[0] + 1]
Global $aCompleteIcons1[$params[0] + 1]
Global $aInstalledIcons1[$params[0] + 1]

$hGUI = GUICreate("My GUI Tab", 852, 650)
GUISetBkColor(0xc64444)

Global $progs[$params[0] + 1]
$progs[0] = $params[0]

$hChild_Ctrls = GUICreate("", 760, 400, 20, 100, $WS_CHILD, -1, $hGUI)
GUISetBkColor(0xc64444)
Dim $iTop = 40, $iLeft = 40, $iTop2 = 60

For $i = 1 To $progs[0]
        $parse = StringRegExp(IniRead("conf.ini", "Params", "prog" & $i, "<de.exe><INI file ?><0>"), "<(.*?)>", 3)
        $hChild_Ctrls1 = _SetProgrs_Proc("images", $i, $parse[1], $anCheckBoxes1, $aCheckedIcons1, $aUnCheckedIcons1, $aInstalledIcons1, $aCompleteIcons1)
Next

GUICtrlCreateTabItem("")
$nStart = GUICtrlCreateButton("Выполнить", 640, 560, 150, 30)
$btn1 = GUICtrlCreateButton("отметить все", 260, 50, 130, 30)

GUISetState(@SW_SHOW, $hGUI)

While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $btn1
                        For $i = 1 To $params[0]
                                $aArray = $anCheckBoxes1[$i]
                                GUICtrlSetState($aArray[1], $GUI_CHECKED)
                        Next
                Case $nStart

        EndSwitch
WEnd

Func _CheckProgrs_Proc($hChild_Ctrls, $aProgs, $anCheckBoxes, $aCheckedIcons, $aUnCheckedIcons, $aInstalledIcons, $aCompleteIcons)
        Local $aCheckBox, $iScrollPos

        For $i = 1 To $aProgs[0]
                $aCheckBox = $anCheckBoxes[$i]

                If GUICtrlRead($aCheckBox[1]) = 1 Then
                        $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                        $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')

                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aInstalledIcons[$i])
                        MsgBox(64, $sProgName, "zz", 3)
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aCompleteIcons[$i])
                Else
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
        Next
EndFunc  ;==>_CheckProgrs_Proc

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile = "", $nIconIndex = 0)
        Local $aRetArr[2]

        $aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft - 20, $iTop - 1, 16, 16)
        GUICtrlSetState($aRetArr[0], $GUI_DISABLE)

        $aRetArr[1] = GUICtrlCreateCheckbox($sText, $iLeft, $iTop, $iWidth, $iHeight)
        GUICtrlSetBkColor($aRetArr[1], 0xc64444)

        Return $aRetArr
EndFunc  ;==>_GUICtrlCreateCheckboxEx

Func _GUICtrlSetImageEx($hWnd, $nCtrlID, $sFileName, $iIconName = "", $iIconType = 0)
        Local $iScrollPage, $iScrollPos

        $iScrollPage = _GUIScrollBars_GetScrollInfoPage($hWnd, $SB_VERT)

        If $iScrollPage > 0 Then
                $iScrollPos = _GUIScrollBars_GetScrollPos($hWnd, $SB_VERT)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, 0)
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iScrollPos)
        Else
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
        EndIf
EndFunc  ;==>_GUICtrlSetImageEx

Func _SetProgrs_Proc($sIconsPath, $iIndex, $sName, ByRef $anCheckBoxes, ByRef $aCheckedIcons, ByRef $aUnCheckedIcons, ByRef $aInstalledIcons, ByRef $aCompleteIcons)
        $aCheckedIcons[$iIndex] = $sIconsPath & "\01.ico"
        $aUnCheckedIcons[$iIndex] = $sIconsPath & "\01.ico"
        $aInstalledIcons[$iIndex] = $sIconsPath & "\03.ico"
        $aCompleteIcons[$iIndex] = $sIconsPath & "\02.ico"
       
        $anCheckBoxes[$iIndex] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($sName, '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons[$i])
        $iTop += 80
        $iTop2 += 80
       
        If $iTop > 370 Then
                _GUIScrollbars_Generate($hChild_Ctrls, 0, $iTop, 0, 0, 1)
        EndIf

        GUISetState(@SW_SHOW, $hChild_Ctrls)
        GUISwitch($hGUI)

        Return $hChild_Ctrls
EndFunc  ;==>_SetProgrs_Proc

Func _SwitchTabs_Proc($iTab, $iMode = -1)
        Switch $iTab
                Case 0
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls2)
                                GUISetState(@SW_SHOW, $hChild_Ctrls1)
                        EndIf

                        ControlFocus($hChild_Ctrls1, "", "")
                Case 1
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls1)
                                GUISetState(@SW_SHOW, $hChild_Ctrls2)
                        EndIf

                        ControlFocus($hChild_Ctrls2, "", "")
        EndSwitch
EndFunc  ;==>_SwitchTabs_Proc

Скорее всего тут нарушилась изначальная концепция, но я же её не знаю. Поэтому либо раскажи мне что конкретно должен делать скрипт, либо сам поправляй и делай выводы :)

Цитата:

Цитата Centrinar
Исправил »

Так теперь это проблема в RegExp? :unsure:

Цитата:

Цитата Centrinar
Вот полный комплект скрипта »

А иконки?

Centrinar 08-09-2010 20:48 1491312

Цитата:

Поэтому либо раскажи мне что конкретно должен делать скрипт, либо сам поправляй и делай выводы
Должен получиться список построенный по данным из ини файла. При нажатии на кнопку Отметить все должны отметиться все чекбоксы. Почти получилось, но в последнем варианте почему то список кривой получился, какие то чекбоксы выше, какие то ниже...

Creat0R 08-09-2010 21:30 1491334

Цитата:

Цитата Centrinar
Должен получиться список построенный по данным из ини файла »

:) Этого мало.

Зачем там в цикле создаётся столько GUI сколько записей в ini?

Цитата:

Цитата Centrinar
какие то чекбоксы выше, какие то ниже »

Может правее/левее? :)

И для чего нужен первый параметр в ini, это типа счётчик всех ключей? можно и без него:

Код:

#RequireAdmin
#NoTrayIcon

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIScrollbars_Ex.au3>

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

$aParams = IniReadSection("conf.ini", "Params")
Global $iTotalParams = UBound($aParams)-1

Global $anCheckBoxes1[$iTotalParams + 1]
Global $aCheckedIcons1[$iTotalParams + 1]
Global $aUnCheckedIcons1[$iTotalParams + 1]
Global $aCompleteIcons1[$iTotalParams + 1]
Global $aInstalledIcons1[$iTotalParams + 1]

$hGUI = GUICreate("My GUI Tab", 852, 650)
GUISetBkColor(0xc64444)

Global $progs[$iTotalParams + 1]
$progs[0] = $iTotalParams

$hChild_Ctrls = GUICreate("", 760, 400, 20, 100, $WS_CHILD, -1, $hGUI)
GUISetBkColor(0xc64444)
Dim $iTop = 40, $iLeft = 40, $iTop2 = 60

For $i = 1 To $progs[0]
        $parse = StringRegExp(IniRead("conf.ini", "Params", "prog" & $i, "<de.exe><INI file ?><0>"), "<(.*?)>", 3)
        $hChild_Ctrls1 = _SetProgrs_Proc("images", $i, $parse[1], $anCheckBoxes1, $aCheckedIcons1, $aUnCheckedIcons1, $aInstalledIcons1, $aCompleteIcons1)
Next

GUISetState(@SW_SHOW, $hChild_Ctrls)
GUISwitch($hGUI)

GUICtrlCreateTabItem("")
$nStart = GUICtrlCreateButton("Выполнить", 640, 560, 150, 30)
$btn1 = GUICtrlCreateButton("отметить все", 260, 50, 130, 30)

GUISetState(@SW_SHOW, $hGUI)

While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $btn1
                        For $i = 1 To $iTotalParams
                                $aArray = $anCheckBoxes1[$i]
                                GUICtrlSetState($aArray[1], $GUI_CHECKED)
                        Next
                Case $nStart

        EndSwitch
WEnd

Func _CheckProgrs_Proc($hChild_Ctrls, $aProgs, $anCheckBoxes, $aCheckedIcons, $aUnCheckedIcons, $aInstalledIcons, $aCompleteIcons)
        Local $aCheckBox, $iScrollPos

        For $i = 1 To $aProgs[0]
                $aCheckBox = $anCheckBoxes[$i]

                If GUICtrlRead($aCheckBox[1]) = 1 Then
                        $sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
                        $sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')

                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aInstalledIcons[$i])
                        MsgBox(64, $sProgName, "zz", 3)
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aCompleteIcons[$i])
                Else
                        _GUICtrlSetImageEx($hChild_Ctrls, $aCheckBox[0], $aUnCheckedIcons[$i])
                EndIf
        Next
EndFunc  ;==>_CheckProgrs_Proc

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile = "", $nIconIndex = 0)
        Local $aRetArr[2]

        $aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft - 20, $iTop - 1, 16, 16)
        GUICtrlSetState($aRetArr[0], $GUI_DISABLE)

        $aRetArr[1] = GUICtrlCreateCheckbox($sText, $iLeft, $iTop, $iWidth, $iHeight)
        GUICtrlSetBkColor($aRetArr[1], 0xc64444)

        Return $aRetArr
EndFunc  ;==>_GUICtrlCreateCheckboxEx

Func _GUICtrlSetImageEx($hWnd, $nCtrlID, $sFileName, $iIconName = "", $iIconType = 0)
        Local $iScrollPage, $iScrollPos

        $iScrollPage = _GUIScrollBars_GetScrollInfoPage($hWnd, $SB_VERT)

        If $iScrollPage > 0 Then
                $iScrollPos = _GUIScrollBars_GetScrollPos($hWnd, $SB_VERT)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, 0)
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iScrollPos)
        Else
                GUICtrlSetImage($nCtrlID, $sFileName, $iIconName, $iIconType)
        EndIf
EndFunc  ;==>_GUICtrlSetImageEx

Func _SetProgrs_Proc($sIconsPath, $iIndex, $sName, ByRef $anCheckBoxes, ByRef $aCheckedIcons, ByRef $aUnCheckedIcons, ByRef $aInstalledIcons, ByRef $aCompleteIcons)
        $aCheckedIcons[$iIndex] = $sIconsPath & "\01.ico"
        $aUnCheckedIcons[$iIndex] = $sIconsPath & "\01.ico"
        $aInstalledIcons[$iIndex] = $sIconsPath & "\03.ico"
        $aCompleteIcons[$iIndex] = $sIconsPath & "\02.ico"
        $anCheckBoxes[$iIndex] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($sName, '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons[$i])
        $iTop += 80
        $iTop2 += 80
       
        If $iTop > 370 Then
                _GUIScrollbars_Generate($hChild_Ctrls, 0, $iTop, 0, 0, 1)
        EndIf
       
        Return $hChild_Ctrls
EndFunc  ;==>_SetProgrs_Proc

Func _SwitchTabs_Proc($iTab, $iMode = -1)
        Switch $iTab
                Case 0
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls2)
                                GUISetState(@SW_SHOW, $hChild_Ctrls1)
                        EndIf

                        ControlFocus($hChild_Ctrls1, "", "")
                Case 1
                        If $iMode = -1 Then
                                GUISetState(@SW_HIDE, $hChild_Ctrls1)
                                GUISetState(@SW_SHOW, $hChild_Ctrls2)
                        EndIf

                        ControlFocus($hChild_Ctrls2, "", "")
        EndSwitch
EndFunc  ;==>_SwitchTabs_Proc

P.S
main=<2> из ini нужно убрать.


Время: 07:01.

Время: 07:01.
© OSzone.net 2001-