Что нового

Проблема с обработкой дочернего окна.

agikon

Знающий
Сообщения
789
Репутация
16
Код нормально компилируется.Нормально запускается.
Но не могу понять почему:
1)дочернее окно не закрывается при нажатии на кнопочку "закрыть"
2)галочка не сохраняется в чекбоксе, да и сам ini-файл не создаётся.


Пожалуйста подкорректируйте.ну я просто не пойму в чём дело и всё тут...



Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

Global $CheckBox

Global  $sIniFile  = @ScriptDir & '\Config.ini', $sD = Default
$iOption1  = IniRead($sIniFile, 'Setting', 'Option1', '1')


$GUI  = GUICreate("PC10")  ; will create a dialog box that when displayed is centered
$nButton1 = GUICtrlCreateButton('пример 1', 20, 50, 110, 30)
$nButton2 = GUICtrlCreateButton('пример 2', 20, 80, 110, 30)
$nButton3 = GUICtrlCreateButton('Окно', 20, 110, 110, 30)
$ontop = GUICtrlCreateCheckbox(" окно всегда наверху", 35, 310, 150, 20)
GUICtrlSetState(-1, $ontop)

GUISetState()

WinSetOnTop ($GUI, "", 1 )
; Run the GUI until the dialog is closed
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $nButton1
            _galochka()

        Case $nButton2
            MsgBox(64, 'Info', 'пример 2', 0, $GUI)
        Case $nButton3
            NewWindow()

        Case $ontop
                If BitAND(GUICtrlRead($ontop), $GUI_CHECKED) then
                    WinSetOnTop ($GUI, "", 1 )
                Else
                    WinSetOnTop ($GUI, "", 0 )
                EndIf
    EndSwitch
Wend

Func NewWindow()
    $GUI2 = GUICreate('New window', 400, 300, -1, -1, -1, -1, $GUI)
    GUISetState()
    $CheckBox = GUICtrlCreateCheckbox("галочка", 15, 120, 340, 20)
	GUICtrlSetState(-1, $iOption1)
    Do
    until GUIGetMsg() = -3


	    While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg


			Case $CheckBox
				If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) then          ;---если стоит флажок то записывает
					IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
				Else              ;---если не стоит флажок то удаляет
					sleep(1)
					IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
				EndIf


				Case $GUI_EVENT_CLOSE
					ExitLoop
        EndSwitch
    WEnd
EndFunc
;-----------------------------------------






Func _galochka()
    If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) Then
		MsgBox(64, 'Info', 'галочка установлена')
	Else
		MsgBox(64, 'Info', 'галочка не установлена')
    endif
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
Re: Подкорректируйте пожалуйста код, просто не пойму в чём дело.

Проверьте:
Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

Global $CheckBox

Global  $sIniFile  = @ScriptDir & '\Config.ini', $sD = Default
$iOption1  = IniRead($sIniFile, 'Setting', 'Option1', '1')

$GUI  = GUICreate("PC10")
$nButton1 = GUICtrlCreateButton('пример 1', 20, 50, 110, 30)
$nButton2 = GUICtrlCreateButton('пример 2', 20, 80, 110, 30)
$nButton3 = GUICtrlCreateButton('Окно', 20, 110, 110, 30)
$ontop = GUICtrlCreateCheckbox(" окно всегда наверху", 35, 310, 150, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
GUISetState()

WinSetOnTop ($GUI, "", 1 )

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton1
            _galochka()
        Case $nButton2
            MsgBox(64, 'Info', 'пример 2', 0, $GUI)
        Case $nButton3
            NewWindow()
        Case $ontop
			If BitAND(GUICtrlRead($ontop), $GUI_CHECKED) then
                WinSetOnTop ($GUI, "", 1 )
			Else
				WinSetOnTop ($GUI, "", 0 )
			EndIf
    EndSwitch
Wend

Func NewWindow()
    $GUI2 = GUICreate('New window', 400, 300, -1, -1, -1, -1, $GUI)
    GUISetState()
    $CheckBox = GUICtrlCreateCheckbox("галочка", 15, 120, 340, 20)
    GUICtrlSetState(-1, $iOption1)


	While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $CheckBox
                If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) then          ;---если стоит флажок то записывает
                    IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
                Else              ;---если не стоит флажок то удаляет
                    sleep(1)
                    IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
                EndIf
			Case $GUI_EVENT_CLOSE
				ExitLoop
        EndSwitch
    WEnd
	GUIDelete($GUI2)
EndFunc

Func _galochka()
    If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) Then
        MsgBox(262144 + 64, 'Info', 'галочка установлена')
    Else
        MsgBox(262144 + 64, 'Info', 'галочка не установлена')
    endif
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Re: Подкорректируйте пожалуйста код, просто не пойму в чём дело.

Zaramot [?]
Тоже неправильно, тут нет обработки родительского окна (т.е нет опроса его событий). Как минимум нужно было отключить родительское окно.
Вот так будет корректнее:

Код:
#include <GuiConstantsEx.au3>

Global $CheckBox, $GUI2

Global $sIniFile = @ScriptDir & '\Config.ini'
Global $iOption1 = IniRead($sIniFile, 'Setting', 'Option1', '1')

$GUI = GUICreate("PC10") ; will create a dialog box that when displayed is centered
$nButton1 = GUICtrlCreateButton('пример 1', 20, 50, 110, 30)
$nButton2 = GUICtrlCreateButton('пример 2', 20, 80, 110, 30)
$nButton3 = GUICtrlCreateButton('Окно', 20, 110, 110, 30)
$OnTop_CB = GUICtrlCreateCheckbox(" окно всегда наверху", 35, 310, 150, 20)
GUICtrlSetState(-1, $GUI_CHECKED)

GUISetState()
WinSetOnTop($GUI, "", 1)

; Run the GUI until the dialog is closed
While 1
	$nMsg = GUIGetMsg(1)
	
	Switch $nMsg[0]
		Case $GUI_EVENT_CLOSE
			Switch $nMsg[1]
				Case $GUI
					Exit
				Case $GUI2
					GUISetState(@SW_HIDE, $GUI2)
			EndSwitch
		Case $nButton1
			_galochka()
		Case $nButton2
			MsgBox(64, 'Info', 'пример 2', 0, $GUI)
		Case $nButton3
			If Not IsHWnd($GUI2) Then
				NewWindow()
			EndIf
			
			GUISetState(@SW_SHOW, $GUI2)
		Case $OnTop_CB
			If BitAND(GUICtrlRead($OnTop_CB), $GUI_CHECKED) Then
				WinSetOnTop($GUI, "", 1)
			Else
				WinSetOnTop($GUI, "", 0)
			EndIf
		Case $CheckBox
			IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
	EndSwitch
WEnd

Func NewWindow()
	$GUI2 = GUICreate('New window', 400, 300, -1, -1, -1, -1, $GUI)
	$CheckBox = GUICtrlCreateCheckbox("галочка", 15, 120, 340, 20)
	GUICtrlSetState(-1, $iOption1)
EndFunc

Func _galochka()
	If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) Then
		MsgBox(64, 'Info', 'галочка установлена')
	Else
		MsgBox(64, 'Info', 'галочка не установлена')
	EndIf
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Подкорректируйте пожалуйста код, просто не пойму в чём дело.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"Подкорректируйте пожалуйста код, просто не пойму в чём дело." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Zaramot, всё бы ничего но ест остались две проблемы:
1)чтобы галочка запомнила своё положение (стоит или не стоит) надо полносью закрыть скрипт и снов его запустить, то есть перезайти в скрипт.

2)И второе это то, что даже если перезайду и галочка запомнит своё положение, то когда нажимаю на кнрпку ПРИМЕР1 то постоянно пишет что "галочка не установлена", то есть код не обрабатывает дочернее окно.
Вот это если бы вот эти две проблемы безболезненно исправить(без глобального изменения кода) то было бы отлично.

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