Что нового

Как реализовать проверку не нажатия кнопок при закрытии GUI ?

dr.room

Новичок
Сообщения
283
Репутация
0
Всем привет
Пытаюсь понять, как можно проверить отсутствие выбора т.е. если вообще не было нажатия кнопок, кроме кнопки выхода?
В качестве примера - скрипт с радио кнопками из справки (немного модифицированный)

Код:
#include <GUIConstantsEx.au3>

Example()

;-------------------------------------------------------------------------------------
; Пример - Нажмите кнопку , чтобы увидеть значение радиокнопки

Func Example()
    Local $button_1, $group_1, $iRadio_1, $iRadio_2, $iRadio_3
    Local $iRadioVal1, $msg, $hGui

    Opt("GUICoordMode", 1)
    $hGui = GUICreate("Демонстрация Радио-кнопок", 400, 280)

    $group_1 = GUICtrlCreateGroup("Group 1", 30, 90, 165, 160)
    GUIStartGroup()
    $iRadio_1 = GUICtrlCreateRadio("Радио &0", 50, 120, 70, 20)
    $iRadio_2 = GUICtrlCreateRadio("Радио &1", 50, 150, 60, 20)
    $iRadio_3 = GUICtrlCreateRadio("Радио &2", 50, 180, 60, 20)

    ; Инициализация переменной, которая будет использована для отслеживания событий GUI
    $iRadioVal1 = 0 ; Принимаем за 0 = первая радиокнопка выбрана, 2 = последняя радиокнопка

    ; Показывает GUI
    GUISetState()

    ; В этом цикле используются переменные для отслеживания изменений состояния радиокнопок,
    ; другой способ заключается в использовании GUICtrlRead(), чтобы читать состояние каждого элемента
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE

           ; на этом месте где-то должен находится способ проверки.

			; пишем предупреждение
		  $iMsgBox = MsgBox (262213,"Предупреждение","Не был выбран ни один из вариантов", 0, $hGui)
		Select
			Case $iMsgBox = 4 ;Повтор
				; Внесите вот сюда то что хотите при нажатии Повтор
			Case $iMsgBox = 2 ;Отмена
				; Внесите вот сюда то что хотите при нажатии Отмена
				Exit
		EndSelect

            Case $msg = $GUI_EVENT_MINIMIZE
                MsgBox(0, "", "Диалог свёрнут", 2, $hGui)
            Case $msg = $GUI_EVENT_MAXIMIZE
                MsgBox(0, "", "Диалог восстановлен", 2, $hGui)


            Case $msg >= $iRadio_1 And $msg <= $iRadio_3
                $iRadioVal1 = $msg - $iRadio_1

        EndSelect
    WEnd
EndFunc
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <GuiConstantsEx.au3>
Global $hGUI, $iRadio1, $iRadio2, $iRadio3, $iRadioValue = 0

$hGUI = GUICreate("Пример", 180, 120)
GUICtrlCreateGroup("Группа", 5, 5, 170, 110)
GUIStartGroup()
$iRadio1 = GUICtrlCreateRadio("Радио &1", 15, 30, Default, 20)
$iRadio2 = GUICtrlCreateRadio("Радио &2", 15, 55, Default, 20)
$iRadio3 = GUICtrlCreateRadio("Радио &3", 15, 80, Default, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $iRadio1
			$iRadioValue = 1
		Case $iRadio2
			$iRadioValue = 2
		Case $iRadio3
			$iRadioValue = 3
		Case $GUI_EVENT_CLOSE
			If Not $iRadioValue Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "Не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
			Else
				Exit MsgBox(64 + 262144, "Сообщение", 'Была выбрана "Радио ' & $iRadioValue & '"', 0, $hGUI)
			EndIf
	EndSwitch
WEnd
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Спасибо большое
Еше есть вопрос - что если групп не одна а несколько и нужно проверять их не зависимо. Потому что это - разная информация?
Код:
#include <GuiConstantsEx.au3>
Global $hGUI, $iRadio1, $iRadio2, $iRadio3, $iRadioValue = 0

$hGUI = GUICreate("Пример", 180, 320)
GUICtrlCreateGroup("Группа 1", 5, 5, 170, 110)
GUIStartGroup()
$iRadio1 = GUICtrlCreateRadio("Радио &1", 15, 30, Default, 20)
$iRadio2 = GUICtrlCreateRadio("Радио &2", 15, 55, Default, 20)
$iRadio3 = GUICtrlCreateRadio("Радио &3", 15, 80, Default, 20)

GUICtrlCreateGroup("Группа 2", 5, 110, 170, 110)
GUIStartGroup()
$iRadio4 = GUICtrlCreateRadio("Радио &1", 15, 145, Default, 20)
$iRadio5 = GUICtrlCreateRadio("Радио &2", 15, 170, Default, 20)
$iRadio6 = GUICtrlCreateRadio("Радио &3", 15, 195, Default, 20)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $iRadio1
            $iRadioValue = 1
        Case $iRadio2
            $iRadioValue = 2
        Case $iRadio3
            $iRadioValue = 3

        Case $iRadio4
            $iRadioValue = 4
        Case $iRadio5
            $iRadioValue = 5
        Case $iRadio6
            $iRadioValue = 6

        Case $GUI_EVENT_CLOSE
            If Not $iRadioValue Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Была выбрана "Радио ' & $iRadioValue & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <GuiConstantsEx.au3>
Global $hGUI, $iRadio1_1, $iRadio1_2, $iRadio1_3, $iRadio2_1, $iRadio2_2, $iRadio2_3, $iRadioValue1 = 0, $iRadioValue2 = 0

$hGUI = GUICreate("Пример", 180, 235)
GUICtrlCreateGroup("Группа 1", 5, 5, 170, 110)
GUIStartGroup()
$iRadio1_1 = GUICtrlCreateRadio("Радио &1", 15, 30, Default, 20)
$iRadio1_2 = GUICtrlCreateRadio("Радио &2", 15, 55, Default, 20)
$iRadio1_3 = GUICtrlCreateRadio("Радио &3", 15, 80, Default, 20)

GUICtrlCreateGroup("Группа 2", 5, 120, 170, 110)
GUIStartGroup()
$iRadio2_1 = GUICtrlCreateRadio("Радио &1", 15, 145, Default, 20)
$iRadio2_2 = GUICtrlCreateRadio("Радио &2", 15, 170, Default, 20)
$iRadio2_3 = GUICtrlCreateRadio("Радио &3", 15, 195, Default, 20)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $iRadio1_1
            $iRadioValue1 = 1
        Case $iRadio1_2
            $iRadioValue1 = 2
        Case $iRadio1_3
            $iRadioValue1 = 3

        Case $iRadio2_1
            $iRadioValue2 = 1
        Case $iRadio2_2
            $iRadioValue2 = 2
        Case $iRadio2_3
            $iRadioValue2 = 3

        Case $GUI_EVENT_CLOSE
            If Not $iRadioValue1 Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "В группе 1 не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
            ElseIf Not $iRadioValue2 Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "В группе 2 не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'В группе 1 была выбрана "Радио ' & $iRadioValue1 & '"' & @CRLF & _
						'В группе 2 была выбрана "Радио ' & $iRadioValue2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Спасибо - всего лишь было добавить переменную и оператор ElseIf Not
Не подскажете , как проверялись бы элементы Combo ?
Вот пример
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>

Local $msg, $Combo1, $Combo2, $hGUI, $add, $add_set, $insert, $clear, $close, $index, $read, $setsel, $count, $select, $find_string, $del_item, $tmp, $sList
$hGUI = GUICreate("Раскрывающийся список") ; Создаёт окно в центре экрана

$Combo2 = GUICtrlCreateCombo("", 10, 40, 150, 23, $CBS_DROPDOWNLIST + $WS_VSCROLL) ; стиль не редактируемого списка
GUICtrlSetData(-1, "элемент1|элемент2|элемент3|элемент4|", "")

GUISetState() ; показывает созданное окно

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE

            ExitLoop
        Case $Combo2
            MsgBox(4096, 'Тест', 'Combo 2, выбор: "' & GUICtrlRead($Combo2) & '"', 1, $hGUI)
	EndSwitch

WEnd
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>

Global $hGUI, $iCombo1, $iCombo2, $sRead1, $sRead2
$hGUI = GUICreate("Пример", 150, 150)

$iCombo1 = GUICtrlCreateCombo(Null, 5, 5, 140, 20, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
GUICtrlSetData(-1, "элемент1|элемент2|элемент3|элемент4")
$iCombo2 = GUICtrlCreateCombo(Null, 5, 30, 140, 20, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
GUICtrlSetData(-1, "элемент1|элемент2|элемент3|элемент4")

GUISetState()

While 1
     Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
			$sRead1 = GUICtrlRead($iCombo1)
			$sRead2 = GUICtrlRead($iCombo2)
			If Not $sRead1 Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Combo 1 не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
			ElseIf Not $sRead2 Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Combo 2 не был выбран ни один из вариантов", 0, $hGUI) = 2 Then Exit
			Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Combo 1, выбор: "' & $sRead1 & '"' & @CRLF & _
						'Combo 2, выбор: "' & $sRead2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Спасибо, Tempo!!
О GUICtrlCreateLabel пока не спрашиваю - тут понятно :smile:
ушел эксперментировать дальше ....

PS
И чуть не забыл - с Наступающим Новым Годом Вас ... и всех благ
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Здравствуйте
Есть вопрос о
Код:
GUICtrlCreateCheckbox

Я попробовал реализовать проверку этого типа кнопки и у меня возникли вопросы
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Local $nCh1, $nCh2, $hGUI

$hGUI =GUICreate("My GUI Checkbox") ; Создаёт окно в центре экрана


$nCh1 = GUICtrlCreateCheckbox("Checkbox 1", 10, 10, 120, 20)
$nCh2 = GUICtrlCreateCheckbox("Checkbox 2", 10, 30, -1, 20)


GUISetState() ; показывает созданное окно


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE ; кнопка закрытия GUI
			   $iValue1 =GUICtrlRead($nCh1)
			   $iValue2 =GUICtrlRead($nCh2)
            If Not   $iValue1 Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 1 не выбран", 0, $hGUI) = 2 Then Exit
			ElseIf Not $iValue2 Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 2 не выбран", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Input 1, выбор: "' & $iValue1 & '"' & @CRLF & _
                        'Input 2, выбор: "' & $iValue2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
При опросе кнопок скрипт отдает такие значения при их опросе: если галочка установлена то 1, если нет то 4. Почему именно такие цифры, есть промежуточные значения?
Я не совсем понял об параметре $BS_AUTO3STATE - зачем еще третье состояние?
Примененный тут оператор If Not для проверки не нажатия- скорее всего бессмыслен, потому что значение будет получено в любом случае т.е. стоит проверять не отсутствие значения а его конкретные значения?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room, это значения констант $GUI_CHECKED и $GUI_UNCHECKED

Скриншот из справки думаю он вам поможет
0625e5a4f3e6.png
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Спасибо, помогло :smile:
Вариант на основе утверждения
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Local $nCh1, $nCh2, $hGUI
$hGUI =GUICreate("My GUI Checkbox") ; Создаёт окно в центре экрана


$nCh1 = GUICtrlCreateCheckbox("Checkbox 1", 10, 10, 120, 20)
$nCh2 = GUICtrlCreateCheckbox("Checkbox 2", 10, 30, -1, 20)


GUISetState() ; показывает созданное окно


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE ; кнопка закрытия GUI
			   $iValue1 =GUICtrlRead($nCh1)
			   $iValue2 =GUICtrlRead($nCh2)
            If  BitAND(GUICtrlRead($nCh1),$GUI_UNCHECKED) Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 1 не выбран", 0, $hGUI) = 2 Then Exit
			ElseIf BitAND(GUICtrlRead($nCh2),$GUI_UNCHECKED) Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 2 не выбран", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Input 1, выбор: "' & $iValue1 & '"' & @CRLF & _
                        'Input 2, выбор: "' & $iValue2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
Но основе отрицания
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Local $nCh1, $nCh2, $hGUI
$hGUI =GUICreate("My GUI Checkbox") ; Создаёт окно в центре экрана


$nCh1 = GUICtrlCreateCheckbox("Checkbox 1", 10, 10, 120, 20)
$nCh2 = GUICtrlCreateCheckbox("Checkbox 2", 10, 30, -1, 20)


GUISetState() ; показывает созданное окно


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE ; кнопка закрытия GUI
			   $iValue1 =GUICtrlRead($nCh1)
			   $iValue2 =GUICtrlRead($nCh2)
            If Not   BitAND(GUICtrlRead($nCh1),$GUI_CHECKED) Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 1 не выбран", 0, $hGUI) = 2 Then Exit
			ElseIf Not BitAND(GUICtrlRead($nCh2),$GUI_CHECKED) Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 2 не выбран", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Input 1, выбор: "' & $iValue1 & '"' & @CRLF & _
                        'Input 2, выбор: "' & $iValue2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
ну и так как мне не дают покоя и оставляют вопросы :(, получаемые значения при их проверке(что же они означают??) , то и на их основе
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Local $nCh1, $nCh2, $hGUI
$hGUI =GUICreate("My GUI Checkbox") ; Создаёт окно в центре экрана


$nCh1 = GUICtrlCreateCheckbox("Checkbox 1", 10, 10, 120, 20)
$nCh2 = GUICtrlCreateCheckbox("Checkbox 2", 10, 30, -1, 20)


GUISetState() ; показывает созданное окно


While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE ; кнопка закрытия GUI
			   $iValue1 =GUICtrlRead($nCh1)
			   $iValue2 =GUICtrlRead($nCh2)
            If $iValue1 = 4 Then
                If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 1 не выбран", 0, $hGUI) = 2 Then Exit
			ElseIf $iValue2 = 4 Then
				If MsgBox(5 + 48 + 262144, "Предупреждение", "Checkbox 2 не выбран", 0, $hGUI) = 2 Then Exit
            Else
                Exit MsgBox(64 + 262144, "Сообщение", 'Input 1, выбор: "' & $iValue1 & '"' & @CRLF & _
                        'Input 2, выбор: "' & $iValue2 & '"', 0, $hGUI)
            EndIf
    EndSwitch
WEnd
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Только сейчас и понял, что эти значение связаны с константами ... :smile: спасибо
 
Верх