Что нового

Цикл Do...Until, убрать мигание объектов.

Rimm

Новичок
Сообщения
30
Репутация
0
Есть 4 комбо. При выборе в первом одного из пунктов появляется второй, при выборе во втором одного из пунктов появляется третий и т. д.
Проблема в том, что пока скрипт мониторит не выбран ли тот или иной пункт, он применяет к элементам окна определенные состояния. Из-за того, что цикл постоянно повторяется, элементы постоянно мигают. Проще увидеть, чем объяснить.
Код:
#include <GUiConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>

Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)

_start ()

Func _start ()
Global $gui = GUICreate ("Редактор", 600, 500)
GUISetFont (10, 400)
GUISetOnEvent ($GUI_EVENT_CLOSE, "_CLOSE")
GUICtrlCreateLabel ("Выберите пункт:", 10, 22, 130, 25)
Global $v_land = GUICtrlCreateCombo ("", 140, 20, 200, 25)
GUICtrlSetFont ($v_land, 8.5, 400)
GUICtrlSetData ($v_land, "Первый|Второй", "")
$v_razdel_l = GUICtrlCreateLabel ("Выберите раздел:", 10, 52, 130, 25) 
$v_razdel = GUICtrlCreateCombo ("", 140, 50, 200, 25)
GUICtrlSetFont ($v_razdel, 8.5, 400)
GUICtrlSetData ($v_razdel, "Третий|Четвертый", "")
$v_podrazdel_l = GUICtrlCreateLabel ("Выберите подраздел:", 10, 82, 130, 25)
$v_podrazdel = GUICtrlCreateCombo ("", 140, 80, 200, 25)
GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)
GUICtrlSetFont ($v_podrazdel, 8.5, 400)
GUICtrlSetData ($v_podrazdel, "Пятый|Шестой", "")
$v_punkt_l = GUICtrlCreateLabel ("Выберите пункт:", 10, 112, 130, 25) 
$v_punkt = GUICtrlCreateCombo ("", 140, 110, 200, 25)
GUICtrlSetState ($v_punkt, $GUI_DISABLE)
GUICtrlSetState ($v_punkt_l, $GUI_DISABLE)
GUICtrlSetFont ($v_punkt, 8.5, 400)
GUICtrlSetData ($v_punkt, "Седьмой|Восьмой", "")
Global $go = GUICtrlCreateButton ("Добавить", 10, 200, 85, 25)
GUICtrlSetOnEvent ($go, "_go")
$1 = GUICtrlCreateLabel ("1", 1, 1, 1, 1)

GUISetState (@SW_SHOW, $gui)

Do
	If GUICtrlRead ($v_land) = "" Then
		GUICtrlSetState ($v_razdel, $GUI_DISABLE)
		GUICtrlSetState ($v_razdel_l, $GUI_DISABLE)
	
	
	Else
		GUICtrlSetState ($v_razdel, $GUI_ENABLE)
		GUICtrlSetState ($v_razdel_l, $GUI_ENABLE)

		Do
			$2 = GUICtrlRead ($v_razdel) 
			If $2 = "" Then
				GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
				GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)
								
			Else
				If $2 = "Третий" Then
					GUICtrlSetState ($v_podrazdel, $GUI_ENABLE)
					GUICtrlSetState ($v_podrazdel_l, $GUI_ENABLE)
					
					Do
						If GUICtrlRead ($v_podrazdel) = "" Then
							GUICtrlSetState ($v_punkt, $GUI_DISABLE)
							GUICtrlSetState ($v_punkt_l, $GUI_DISABLE)
						Else
							GUICtrlSetState ($v_punkt, $GUI_ENABLE)
							GUICtrlSetState ($v_punkt_l, $GUI_ENABLE)
						EndIf
					Until 1
					
					
				Else
					GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
					GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)
					
					
				
				EndIf
			EndIf
		Until 1
	EndIf
Until 0


EndFunc

While 1
	sleep (1000)
WEnd

Func _CLOSE ()
	Exit
EndFunc

А также, если я выбрал все 4 combo, а потом изменил во втором ("Выберите раздел") значение с "Третий" на "Четвертый", то необходимо, чтобы расположенные ниже combo стали Disable.
Надеюсь, доступно объяснил. Заранее спасибо!
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Rimm

Код:
#include <GUiConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>

Opt("TrayAutoPause", 0)

_start ()

Func _start ()
Global $gui = GUICreate ("Редактор", 600, 500)
GUISetFont (10, 400)
GUISetOnEvent ($GUI_EVENT_CLOSE, "_CLOSE")
GUICtrlCreateLabel ("Выберите пункт:", 10, 22, 130, 25)
Global $v_land = GUICtrlCreateCombo ("", 140, 20, 200, 25)
GUICtrlSetFont ($v_land, 8.5, 400)
GUICtrlSetData ($v_land, "Первый|Второй", "")
$v_razdel_l = GUICtrlCreateLabel ("Выберите раздел:", 10, 52, 130, 25)
GUICtrlSetState (-1, $GUI_DISABLE)
$v_razdel = GUICtrlCreateCombo ("", 140, 50, 200, 25)
GUICtrlSetState (-1, $GUI_DISABLE)
GUICtrlSetFont ($v_razdel, 8.5, 400)
GUICtrlSetData ($v_razdel, "Третий|Четвертый", "")
$v_podrazdel_l = GUICtrlCreateLabel ("Выберите подраздел:", 10, 82, 130, 25)
$v_podrazdel = GUICtrlCreateCombo ("", 140, 80, 200, 25)
GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)
GUICtrlSetFont ($v_podrazdel, 8.5, 400)
GUICtrlSetData ($v_podrazdel, "Пятый|Шестой", "")
$v_punkt_l = GUICtrlCreateLabel ("Выберите пункт:", 10, 112, 130, 25)
$v_punkt = GUICtrlCreateCombo ("", 140, 110, 200, 25)
GUICtrlSetState ($v_punkt, $GUI_DISABLE)
GUICtrlSetState ($v_punkt_l, $GUI_DISABLE)
GUICtrlSetFont ($v_punkt, 8.5, 400)
GUICtrlSetData ($v_punkt, "Седьмой|Восьмой", "")
Global $go = GUICtrlCreateButton ("Добавить", 10, 200, 85, 25)
;GUICtrlSetOnEvent ($go, "_go")
$1 = GUICtrlCreateLabel ("1", 1, 1, 1, 1)

GUISetState (@SW_SHOW, $gui)

While 1
 $2 = GUICtrlRead ($v_razdel)
    Switch GUIGetMsg()

        Case $GUI_EVENT_CLOSE
            Exit

        Case $v_land
            If GUICtrlRead ($v_land) = "" Then
                GUICtrlSetState ($v_razdel, $GUI_DISABLE)
                GUICtrlSetState ($v_razdel_l, $GUI_DISABLE)
            Else
                GUICtrlSetState ($v_razdel, $GUI_ENABLE)
                GUICtrlSetState ($v_razdel_l, $GUI_ENABLE)
            EndIf

        Case $v_razdel

            If $2 = "" Then
                GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
                GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)

            Else
                If $2 = "Третий" Then
                    GUICtrlSetState ($v_podrazdel, $GUI_ENABLE)
                    GUICtrlSetState ($v_podrazdel_l, $GUI_ENABLE)
                EndIf
				If $2 = "Четвертый" Then
                                        GUICtrlSetState ($v_podrazdel, $GUI_DISABLE)
                                        GUICtrlSetState ($v_podrazdel_l, $GUI_DISABLE)
					GUICtrlSetState ($v_punkt, $GUI_DISABLE)
					GUICtrlSetState ($v_punkt_l, $GUI_DISABLE)
                EndIf
            EndIf

        Case $v_podrazdel
            If GUICtrlRead ($v_podrazdel) = "" Then
                GUICtrlSetState ($v_punkt, $GUI_DISABLE)
                GUICtrlSetState ($v_punkt_l, $GUI_DISABLE)
            Else
                GUICtrlSetState ($v_punkt, $GUI_ENABLE)
                GUICtrlSetState ($v_punkt_l, $GUI_ENABLE)
            EndIf
    EndSwitch
WEnd

EndFunc

Func _CLOSE ()
    Exit
EndFunc
 
Автор
R

Rimm

Новичок
Сообщения
30
Репутация
0
ivsatel, спасибо, но я чуть неправильно описал свои пожелания. Если не сложно, посмотри еще раз первый пост.
 
Автор
R

Rimm

Новичок
Сообщения
30
Репутация
0
Спасибо! Все отлично!
 
Верх