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

Ответить
 • Просмотры: 1
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Много непоняток в коде, например, зачем там GUISetState(@SW_DISABLE) и проверка активности окна?

И что за AutoItConstants.au3?



Я бы делал так:



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

#include <GUIConstants.au3>
#include <GUIConstantsEx.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"
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$hGUI = 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
            $Ask = MsgBox(256 + 32 + 4 + 262144, "", "TEST", 0, $hGUI)
            If $Ask <> 6 Then
                For $iID = $id1 To $id6
                    GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
                Next
                ContinueLoop
            EndIf
            GUISetState(@SW_HIDE)
            $bChecked = False
            For $iID = $id1 To $id6
                ; хотя бы один отмечен
                If _Checked($iID) Then
                    $bChecked = True
                    MsgBox(4096 + 64, "", GUICtrlRead($iID, 1), 1, $hGUI)
                    GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
                EndIf
            Next
            ; все пустые
            If Not $bChecked Then
                MsgBox(4096 + 64, "", "UNCHECKED", 1, $hGUI)
            Else
                MsgBox(4096 + 64, "", "END", 1, $hGUI)
            EndIf
            GUISetState(@SW_SHOW)
    EndSwitch
WEnd
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Func _Checked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_Checked
Аватара пользователя
nibble74

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

Сообщение nibble74 »

Цитата Creat0R:



зачем там GUISetState(@SW_DISABLE) и проверка активности окна?
Автоматическое переключение Checkbox




Так в моём варианте после появления окна с кнопками Да и Нет родительское окно оставалось активным, что меня не устраивало, а активация из-за того, что это же окно иногда убегало на задний план если открыты какие нибудь окна приложений.




Цитата Creat0R:



И что за AutoItConstants.au3?
Автоматическое переключение Checkbox




просто забыл убрать, для чего нужно было уже не помню )



Огромнейшее спасибо за помощь.





P.S. Жаль, что полноценной справки к AutoIt на русском нет.
Аватара пользователя
nibble74

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

Сообщение nibble74 »

Creat0R,



Что то я не понял как вставить команды, мучаюсь уже пару часов )



Допустим отметили несколько CheckBox (ID2, ID4, ID6) и нужно выполнить RunWait - у каждого CheckBox своя команда RunWait, а также у каждого CheckBox

может быть несколько RunWait с проверкой архитектуры, скажем вот так





Код:

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

If _Checked($id1) Then
  If @OSArch = "X86" Then RunWait(@ScriptDir & "\...")
  If @OSArch = "X64" Then
	 RunWait(@ScriptDir & "\...")
	 RunWait(@ScriptDir & "\...")
  EndIf
EndIf
Аватара пользователя
nibble74

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

Сообщение nibble74 »

Немного пришлось изменить





Код:

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

            GUISetState(@SW_HIDE)
            $bChecked = False
            For $iID = $id1 To $id6
                If _Checked($id1) Then
                    $bChecked = True
                     MsgBox(4096 + 64, "", "ID1", 1, $hGUI)
                     GUICtrlSetState($id1, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
		EndIf
	        If _Checked($id2) Then
                    $bChecked = True
                     MsgBox(4096 + 64, "", "ID2", 1, $hGUI)
                     GUICtrlSetState($id2, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
		EndIf
               ; .....
            Next
            If Not $bChecked Then
                MsgBox(4096 + 64, "", "UNCHECKED", 1, $hGUI)
	    Else
                MsgBox(4096 + 64, "", "END", 1, $hGUI)
            EndIf
            GUISetState(@SW_SHOW)
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Код:

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

While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $Close, $GUI_EVENT_CLOSE
            Exit
            ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Case $Button2
            $Ask = MsgBox(256 + 32 + 4 + 262144, "", "TEST", 0, $hGUI)
            If $Ask  6 Then
                For $iID = $id1 To $id6
                    GUICtrlSetState($iID, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
                Next
                ContinueLoop
            EndIf
            GUISetState(@SW_HIDE)
            $bChecked = False
            For $iID = $id1 To $id6
                ; хотя бы один отмечен
                If _Checked($iID) Then
                    $bChecked = True
                    ExitLoop
                EndIf
            Next
            ; все пустые
            If Not $bChecked Then
                MsgBox(4096 + 64, "", "UNCHECKED", 1, $hGUI)
            Else
                If _Checked($id1) Then
                     MsgBox(4096 + 64, "", "id1", 1, $hGUI)
                    GUICtrlSetState($id1, BitOR($GUI_UNCHECKED, $GUI_ENABLE))
                    Switch @OSArch
                        Case "X86"
                            RunWait(@ScriptDir & "\...")
                        Case "X64"
                            RunWait(@ScriptDir & "\...")
                            RunWait(@ScriptDir & "\...")
                    EndSwitch
                EndIf
                ;и т.д. (If _Checked($id2) Then)
                MsgBox(4096 + 64, "", "END", 1, $hGUI)
            EndIf
            GUISetState(@SW_SHOW)
    EndSwitch
WEnd
Аватара пользователя
nibble74

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

Сообщение nibble74 »

Creat0R,



Есть ли возможность сделать GUICtrlCreateRadio с прокруткой в окне ?




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




Код:

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

#include 
#include 
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$hGUI = GUICreate("Test", 200, 150, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_VSCROLL)
GUIStartGroup()
$id1 = GUICtrlCreateRadio ("1", 15, 20, -1, -1)
$id2 = GUICtrlCreateRadio ("2", 15, 40, -1, -1)
$id3 = GUICtrlCreateRadio ("3", 15, 60, -1, -1)
$id4 = GUICtrlCreateRadio ("4", 15, 80, -1, -1)
GUIStartGroup()
$id5 = GUICtrlCreateRadio ("5", 15, 100, -1, -1)
$id6 = GUICtrlCreateRadio ("6", 15, 120, -1, -1)
$id7 = GUICtrlCreateRadio ("7", 15, 140, -1, -1)
$id8 = GUICtrlCreateRadio ("8", 15, 160, -1, -1)
GUIStartGroup()
$id9 = GUICtrlCreateRadio ("9", 15, 180, -1, -1)
$id10 = GUICtrlCreateRadio ("10", 15, 200, -1, -1)
$id11 = GUICtrlCreateRadio ("11", 15, 220, -1, -1)
$id12 = GUICtrlCreateRadio ("12", 15, 240, -1, -1)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GUISetState()
While 1
   $iMsg = GUIGetMsg()
   Switch $iMsg
	  Case $GUI_EVENT_CLOSE
		 Exit
   EndSwitch
WEnd
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Цитата nibble74:



Есть ли возможность сделать GUICtrlCreateRadio с прокруткой в окне ?
Автоматическое переключение Checkbox




Да, но это уже другая тема.
Аватара пользователя
nibble74

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

Сообщение nibble74 »

Цитата Creat0R:



Да, но это уже другая тема.
Автоматическое переключение Checkbox




Фильтр не дал результат такой темы, только нашёл для GUICtrlCreateLabel, но это не совсем то, что надо.



Создать новую тему ?
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Цитата nibble74:



Создать новую тему ?
Автоматическое переключение Checkbox




Да, а эту пометить решённой.
Ответить

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