Автоматическое переключение Checkbox

Аватара пользователя
nibble74

Автоматическое переключение Checkbox

Сообщение nibble74 »

Возможно ли реализовать авто переключение CHECKBOX в этом скрипте и как ?

Допустим установлена галочка на CHECKBOX 1, тогда с CHECKBOX 1.1 галочка снимается если она там была. Если устанавливаем на CHECKBOX 1.1, то с CHECKBOX 1 снимается.

Также CHECKBOX 2 - CHECKBOX 2.2

и так далее в случае присутствия следующих CHECKBOX .....




читать дальше »




Код:

Код: Выделить всё

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
#ce ----------------------------------------------------------------------------
#include 
Opt("TrayIconDebug", 1)
Opt("TrayIconHide", 0)
Opt("GUICloseOnESC", 1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Beep(1000, 150)
GUICreate("TEST", 440, 440)
$nInst = GUICtrlCreateButton ("Run",  7, 410, 80, 22)
$Close = GUICtrlCreateButton ("Exit",  350, 410, 80, 22)
$icon = GUICtrlCreateIcon ("@ScriptDir & '\name.exe",0, 29,375,32,32)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Disable", 7, 15, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 12, 40, -1, -1)
$id2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 12, 60, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Restore", 7, 200, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id11 = GUICtrlCreateCheckbox ("CHECKBOX 1.1", 12, 230, -1, -1)
$id12 = GUICtrlCreateCheckbox ("CHECKBOX 2.2", 12, 250, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
Do
    $msg = GUIGetMsg()
       If $msg = $Close Then Exit
       If $msg = $nInst Then
         GUISetState(@SW_MINIMIZE);@SW_MINIMIZE
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Отключить и остановить^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id1) Then
                MsgBox(4096+48, '', 'CHECKBOX 1', 1)
            Endif
            If _Checked($id2) Then
                MsgBox(4096+48, '', 'CHECKBOX 2', 1)
            Endif
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^По умолчанию^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id11) Then
                MsgBox(4096+48, '', 'CHECKBOX 1.1', 1)
            Endif
            If _Checked($id12) Then
                MsgBox(4096+48, '', 'CHECKBOX 2.2', 1)
            Endif
         GUISetState(@SW_RESTORE)
        If $msg = $GUI_EVENT_CLOSE Then Exit
   EndIf
Until $msg = -3
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked
Аватара пользователя
Creat0R

Re: Автоматическое переключение Checkbox

Сообщение Creat0R »

Код:

Код: Выделить всё

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
#ce ----------------------------------------------------------------------------

#include 
Opt("TrayIconDebug", 1)
Opt("TrayIconHide", 0)
Opt("GUICloseOnESC", 1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Beep(1000, 150)
GUICreate("TEST", 440, 440)
$nInst = GUICtrlCreateButton ("Run",  7, 410, 80, 22)
$Close = GUICtrlCreateButton ("Exit",  350, 410, 80, 22)
$icon = GUICtrlCreateIcon ("@ScriptDir & '\name.exe",0, 29,375,32,32)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Disable", 7, 15, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 12, 40, -1, -1)
$id2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 12, 60, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Restore", 7, 200, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id11 = GUICtrlCreateCheckbox ("CHECKBOX 1.1", 12, 230, -1, -1)
$id12 = GUICtrlCreateCheckbox ("CHECKBOX 2.2", 12, 250, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
        Case $nInst
            GUISetState(@SW_MINIMIZE);@SW_MINIMIZE
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Отключить и остановить^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id1) Then
                MsgBox(4096+48, '', 'CHECKBOX 1', 1)
            Endif
            If _Checked($id2) Then
                MsgBox(4096+48, '', 'CHECKBOX 2', 1)
            Endif
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^По умолчанию^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id11) Then
                MsgBox(4096+48, '', 'CHECKBOX 1.1', 1)
            Endif
            If _Checked($id12) Then
                MsgBox(4096+48, '', 'CHECKBOX 2.2', 1)
            Endif
            GUISetState(@SW_RESTORE)
        Case $id1, $id11, $id2, $id12
            $iNext = $iMsg + 1
            If $iMsg = $id2 Or $iMsg = $id12 Then
                $iNext = $iMsg - 1
            EndIf
            GUICtrlSetState($iNext, $GUI_UNCHECKED)
            If Not _Checked($iMsg) Then GUICtrlSetState($iMsg, $GUI_CHECKED)
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked
Аватара пользователя
nibble74

Re: Автоматическое переключение Checkbox

Сообщение nibble74 »

Creat0R, в вашем варианте рекурсия происходит в каждой из групп, а нужно чтобы рекурсивно происходило в обеих группах.



Изначально галочки отсутствуют.



Установили на CHECKBOX 1 имеет связь с CHECKBOX 1.1

Установили на CHECKBOX 1.1 с CHECKBOX 1 снимается



Установили на CHECKBOX 2 имеет связь с CHECKBOX 2.2

Установили на CHECKBOX 2.2 с CHECKBOX 2 снимается



CHECKBOX 1 >> CHECKBOX 1.1

CHECKBOX 1 > CHECKBOX 2.2

CHECKBOX 2
Аватара пользователя
Creat0R

Re: Автоматическое переключение Checkbox

Сообщение Creat0R »

Цитата nibble74:



в вашем варианте рекурсия происходит в каждой из групп, а нужно чтобы рекурсивно происходило в обеих группах.
Автоматическое переключение Checkbox




Не совсем понял, что значит в обеих?

1 привязан к 1.1, а 2 к 2.2.



Может так:



Код:

Код: Выделить всё

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
#ce ----------------------------------------------------------------------------

#include 
Opt("TrayIconDebug", 1)
Opt("TrayIconHide", 0)
Opt("GUICloseOnESC", 1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Beep(1000, 150)
GUICreate("TEST", 440, 440)
$nInst = GUICtrlCreateButton ("Run",  7, 410, 80, 22)
$Close = GUICtrlCreateButton ("Exit",  350, 410, 80, 22)
$icon = GUICtrlCreateIcon ("@ScriptDir & '\name.exe",0, 29,375,32,32)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Disable", 7, 15, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 12, 40, -1, -1)
$id11 = GUICtrlCreateCheckbox ("CHECKBOX 1.1", 12, 230, -1, -1)
$id2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 12, 60, -1, -1)
$id12 = GUICtrlCreateCheckbox ("CHECKBOX 2.2", 12, 250, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Restore", 7, 200, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
        Case $nInst
            GUISetState(@SW_MINIMIZE);@SW_MINIMIZE
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Отключить и остановить^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id1) Then
                MsgBox(4096+48, '', 'CHECKBOX 1', 1)
            Endif
            If _Checked($id2) Then
                MsgBox(4096+48, '', 'CHECKBOX 2', 1)
            Endif
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^По умолчанию^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id11) Then
                MsgBox(4096+48, '', 'CHECKBOX 1.1', 1)
            Endif
            If _Checked($id12) Then
                MsgBox(4096+48, '', 'CHECKBOX 2.2', 1)
            Endif
            GUISetState(@SW_RESTORE)
        Case $id1, $id11, $id2, $id12
            $iNext = $iMsg + 1
            If $iMsg = $id11 Or $iMsg = $id12 Then
                $iNext = $iMsg - 1
            EndIf
            GUICtrlSetState($iNext, $GUI_UNCHECKED)
            If Not _Checked($iMsg) Then GUICtrlSetState($iMsg, $GUI_CHECKED)
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked

А вообще это делается не с CheckBox, а с Radio.





Код:

Код: Выделить всё

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
#ce ----------------------------------------------------------------------------

#include 
Opt("TrayIconDebug", 1)
Opt("TrayIconHide", 0)
Opt("GUICloseOnESC", 1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Beep(1000, 150)
GUICreate("TEST", 440, 440)
$nInst = GUICtrlCreateButton ("Run",  7, 410, 80, 22)
$Close = GUICtrlCreateButton ("Exit",  350, 410, 80, 22)
$icon = GUICtrlCreateIcon ("@ScriptDir & '\name.exe",0, 29,375,32,32)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Disable", 7, 15, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id1 = GUICtrlCreateRadio ("CHECKBOX 1", 12, 40, -1, -1)
$id11 = GUICtrlCreateRadio ("CHECKBOX 1.1", 12, 230, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Restore", 7, 200, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id2 = GUICtrlCreateRadio ("CHECKBOX 2", 12, 60, -1, -1)
$id12 = GUICtrlCreateRadio ("CHECKBOX 2.2", 12, 250, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
        Case $nInst
            GUISetState(@SW_MINIMIZE);@SW_MINIMIZE
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Отключить и остановить^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id1) Then
                MsgBox(4096+48, '', 'CHECKBOX 1', 1)
            Endif
            If _Checked($id2) Then
                MsgBox(4096+48, '', 'CHECKBOX 2', 1)
            Endif
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^По умолчанию^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id11) Then
                MsgBox(4096+48, '', 'CHECKBOX 1.1', 1)
            Endif
            If _Checked($id12) Then
                MsgBox(4096+48, '', 'CHECKBOX 2.2', 1)
            Endif
            GUISetState(@SW_RESTORE)
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked
Аватара пользователя
nibble74

Re: Автоматическое переключение Checkbox

Сообщение nibble74 »

Creat0R,



С чекбоксами лучше, там есть возможность добавить ещё пункты CHECKBOX 3 - 4 - 5 >> CHECKBOX 13 - 14 - 15 (цифры поменял для удобства) и т.д,

а вот как добавить в Radio не разобрался. Возможно ли и в Radio добавлять пункты ???



Вот с добавлением для CHECKBOX


читать дальше »




Код:

Код: Выделить всё

#cs ----------------------------------------------------------------------------
 AutoIt Version: 3.3.14.2
#ce ----------------------------------------------------------------------------

#include 
Opt("TrayIconDebug", 1)
Opt("TrayIconHide", 0)
Opt("GUICloseOnESC", 1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Beep(1000, 150)
GUICreate("TEST", 440, 440)
$nInst = GUICtrlCreateButton ("Run",  7, 410, 80, 22)
$Close = GUICtrlCreateButton ("Exit",  350, 410, 80, 22)
$icon = GUICtrlCreateIcon ("@ScriptDir & '\name.exe",0, 29,375,32,32)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Disable", 7, 15, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
$id1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 12, 40, -1, -1)
$id11 = GUICtrlCreateCheckbox ("CHECKBOX 11", 12, 230, -1, -1)
$id2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 12, 60, -1, -1)
$id12 = GUICtrlCreateCheckbox ("CHECKBOX 12", 12, 250, -1, -1)
$id3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 12, 80, -1, -1)
$id13 = GUICtrlCreateCheckbox ("CHECKBOX 13", 12, 270, -1, -1)
$id4 = GUICtrlCreateCheckbox ("CHECKBOX 4", 12, 100, -1, -1)
$id14 = GUICtrlCreateCheckbox ("CHECKBOX 14", 12, 290, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICtrlCreateGroup("Restore", 7, 200, 426, 170)
GUICtrlSetFont(-1, -1, 700)
DllCall('UxTheme.dll', 'int', 'SetWindowTheme', 'hwnd', GUICtrlGetHandle(-1), 'wstr', 0, 'wstr', 0)
GUICtrlSetColor(-1, 0x0000FF)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
        Case $nInst
            GUISetState(@SW_MINIMIZE);@SW_MINIMIZE
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Отключить и остановить^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id1) Then
                MsgBox(4096+48, '', 'CHECKBOX 1', 1)
            Endif
            If _Checked($id2) Then
                MsgBox(4096+48, '', 'CHECKBOX 2', 1)
            Endif
            If _Checked($id3) Then
                MsgBox(4096+48, '', 'CHECKBOX 3', 1)
            Endif
            If _Checked($id4) Then
                MsgBox(4096+48, '', 'CHECKBOX 4', 1)
            Endif
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^По умолчанию^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            If _Checked($id11) Then
                MsgBox(4096+48, '', 'CHECKBOX 11', 1)
            Endif
            If _Checked($id12) Then
                MsgBox(4096+48, '', 'CHECKBOX 12', 1)
            Endif
            If _Checked($id13) Then
                MsgBox(4096+48, '', 'CHECKBOX 13', 1)
            Endif
            If _Checked($id14) Then
                MsgBox(4096+48, '', 'CHECKBOX 14', 1)
            Endif
            GUISetState(@SW_RESTORE)
        Case $id1, $id11, $id2, $id12, $id3, $id13, $id4, $id14
            $iNext = $iMsg + 1
            If $iMsg = $id11 Or $iMsg = $id12 Then
                $iNext = $iMsg - 1
            EndIf
            If $iMsg = $id12 Or $iMsg = $id13 Then
                $iNext = $iMsg - 1
            EndIf
            If $iMsg = $id13 Or $iMsg = $id14 Then
                $iNext = $iMsg - 1
            EndIf
            GUICtrlSetState($iNext, $GUI_UNCHECKED)
            If Not _Checked($iMsg) Then GUICtrlSetState($iMsg, $GUI_CHECKED)
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked
Аватара пользователя
Creat0R

Re: Автоматическое переключение Checkbox

Сообщение Creat0R »

Код:

Код: Выделить всё

...
GUIStartGroup()
$id1 = GUICtrlCreateRadio ("CHECKBOX 1", 12, 40, -1, -1)
$id11 = GUICtrlCreateRadio ("CHECKBOX 11", 12, 230, -1, -1)
GUIStartGroup()
$id2 = GUICtrlCreateRadio ("CHECKBOX 2", 12, 60, -1, -1)
$id12 = GUICtrlCreateRadio ("CHECKBOX 12", 12, 250, -1, -1)
GUIStartGroup()
$id3 = GUICtrlCreateRadio ("CHECKBOX 3", 12, 80, -1, -1)
$id13 = GUICtrlCreateRadio ("CHECKBOX 13", 12, 270, -1, -1)
GUIStartGroup()
$id4 = GUICtrlCreateRadio ("CHECKBOX 4", 12, 100, -1, -1)
$id14 = GUICtrlCreateRadio ("CHECKBOX 14", 12, 290, -1, -1)
...



Код:

Код: Выделить всё

Case $id1, $id11, $id2, $id12, $id3, $id13, $id4, $id14

в этом случае не нужно.
Аватара пользователя
nibble74

Re: Автоматическое переключение Checkbox

Сообщение nibble74 »

Creat0R,



Премного благодарен !
Аватара пользователя
nibble74

Re: Автоматическое переключение Checkbox

Сообщение nibble74 »

Creat0R,



Не разобрался с активностью и не активностью Checkbox в это скрипте

хотел сделать так чтобы при установке галочки на "ID 7" со всех "ID 1...ID 6" галочки снимались и

сами "ID 1...ID 6" становились неактивные, а при снятии галочки с "ID 7" всё становилось снова активным.

Помогите пожалуйста


читать дальше »




Код:

Код: Выделить всё

#include 
GUICreate("Test", 250, 250)
$Button1 = GUICtrlCreateButton("Установить", 7, 220, 80, 22)
GUICtrlSetState(-1, 256 + 512) ;$GUI_FOCUS + $GUI_DEFBUTTON
$Close = GUICtrlCreateButton("Выход", 160, 220, 80, 22)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$id1 = GUICtrlCreateCheckbox ("ID 1", 16, 50, -1, -1)
GUICtrlSetState (-1,$GUI_UNCHECKED)
$id2 = GUICtrlCreateCheckbox ("ID 2", 16, 70, -1, -1)
GUICtrlSetState (-1,$GUI_CHECKED)
$id3 = GUICtrlCreateCheckbox ("ID 3", 16, 90, -1, -1)
GUICtrlSetState (-1,$GUI_CHECKED)
;GUIStartGroup()
$id4 = GUICtrlCreateCheckbox ("ID 4", 16, 120, -1, -1, $BS_AUTORADIOBUTTON)
$id5 = GUICtrlCreateCheckbox ("ID 5", 16, 140, -1, -1, $BS_AUTORADIOBUTTON)
$id6 = GUICtrlCreateCheckbox ("ID 6", 16, 160, -1, -1, $BS_AUTORADIOBUTTON)
$id7 = GUICtrlCreateCheckbox ("ID 7", 16, 190, -1, -1)
GUICtrlSetState ($id6,$GUI_CHECKED)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
  $iMsg = GUIGetMsg()
    Switch $iMsg
      Case $Close, $GUI_EVENT_CLOSE
         Exit
      Case $Button1
          GUISetState(@SW_HIDE)
                 If _Checked($id1) Then
                        MsgBox(0,"","ID 1",1)
                   Endif
                 If _Checked($id2) Then
                        MsgBox(0,"","ID 2",1)
                   Endif
                 If _Checked($id3) Then
                        MsgBox(0,"","ID 3",1)
                   Endif
                 If _Checked($id4) Then
                        MsgBox(0,"","ID 4",1)
                   Endif
                 If _Checked($id5) Then
                        MsgBox(0,"","ID 5",1)
                   Endif
                 If _Checked($id6) Then
                        MsgBox(0,"","ID 6",1)
                   Endif
                 If _Checked($id7) Then
                        MsgBox(0,"","ID 7",1)
                   Endif
          GUIDelete()
          MsgBox(4096+48, '', 'Завершено', 5)
       Exit
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked
Аватара пользователя
Creat0R

Re: Автоматическое переключение Checkbox

Сообщение Creat0R »

Код:

Код: Выделить всё

While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            ...
        Case $id7
            $iState = $GUI_ENABLE
            If GUICtrlRead($id7) = $GUI_CHECKED Then
                $iState = $GUI_DISABLE
            EndIf
            For $iID = $id1 To $id6
                GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $iState))
            Next
    EndSwitch
WEnd
Аватара пользователя
nibble74

Re: Автоматическое переключение Checkbox

Сообщение nibble74 »

Creat0R,



Тут вот набрал часть скрипта


читать дальше »

Код: Выделить всё

#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <AutoItConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Opt("TrayIconDebug", 1)        ;0 - без сведений, 1 - отладочные сведения
Opt("TrayIconHide", 0)        ;0 - отображать, 1 - скрыть
Opt("GUICloseOnESC", 1)        ;0 = При нажатии ESC не высылать сообщение $GUI_EVENT_CLOSE.
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Global $Title = "TEST"
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUICreate($Title, 265, 355, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX)
$Button2 = GUICtrlCreateButton("DELETE", 70, 260, 120, 22)
$Close = GUICtrlCreateButton("ESC", 70, 300, 120, 22)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$id1 = GUICtrlCreateCheckbox ("ID 1", 18, 50, -1, -1)
$id2 = GUICtrlCreateCheckbox ("ID 2", 18, 70, -1, -1)
$id3 = GUICtrlCreateCheckbox ("ID 3", 18, 90, -1, -1)
$id4 = GUICtrlCreateCheckbox ("ID 4", 18, 110, -1, -1)
$id5 = GUICtrlCreateCheckbox ("ID 5", 18, 130, -1, -1)
$id6 = GUICtrlCreateCheckbox ("ID 6", 18, 150, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
  $iMsg = GUIGetMsg()
    Switch $iMsg
      Case $Close, $GUI_EVENT_CLOSE
         Exit
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      Case $Button2
            GUISetState(@SW_DISABLE)
               $Ask = MsgBox(256+32+4+262144, "", "TEST", 0)
            If $Ask <> 6 Then
                  For $iID = $id1 To $id6
                  GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
               Next
            GUISetState(@SW_ENABLE)
               If Not WinActive($Title) Then WinActivate($Title)
               Else
               ; 1. Тут проверка на присутствие отмеченных чекбоксов и если хотя бы один не отмечен (т.е. все пустые) то появляется диалог
                     MsgBox(4096+64, "", "UNCHECKED", 1) ;дальнейшее выполнение скрипта прекращается и преходит в режим ожидания.
               ; 2. Если присутствуют отмеченные чекбоксы (все или хотя бы один, то скрипт продолжает выполнять команды ниже
            GUISetState(@SW_HIDE)
                 If _Checked($id1) Then MsgBox(4096+64, "", "id1", 1)
                 If _Checked($id2) Then MsgBox(4096+64, "", "id2", 1)
                 If _Checked($id3) Then MsgBox(4096+64, "", "id3", 1)
                 If _Checked($id4) Then MsgBox(4096+64, "", "id4", 1)
                 If _Checked($id5) Then MsgBox(4096+64, "", "id5", 1)
                 If _Checked($id6) Then MsgBox(4096+64, "", "id6", 1)
               MsgBox(4096+64, "", "END", 1)
            GUISetState(@SW_SHOW)
            GUISetState(@SW_ENABLE)
               For $iID = $id1 To $id6
                  GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
               Next
               If Not WinActive($Title) Then WinActivate($Title)
            EndIf
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_Checked

в самом скрипте закомментировано что не получается сделать после "Else". Может есть вариант это реализовать ?
Ответить

Вернуться в «AutoIt»