Что нового

Скрытие окна Gui после нажатия кнопки GuiCtrlCreateButton

Fallen

Новичок
Сообщения
39
Репутация
0
Код:
#include <GuiConstants.au3>

GuiCreate("Вызов из MT4", 450, 100) ; создали окно

GUICtrlCreateLabel("1", 20, 10)
GUICtrlCreateLabel("2 ", 10, 30)
GUICtrlCreateLabel("3", 35, 50) 
$num = GuiCtrlCreateInput("1235", 70, 70, 100, 20) ; создали поле для ввода
$b_Enter = GuiCtrlCreateButton("Задать", 170, 70, 60, 20) ; создали кнопку "Задать"
$b_Exit = GuiCtrlCreateButton("Выйти", 230, 70, 100, 20) ; создали кнопку "Выйти"


GuiSetState() ; показали окно ввода

While 1 
$msg = GUIGetMsg() ; ждем событий из окна ввода
Select
Case $msg = $GUI_EVENT_CLOSE ; нажали X
ExitLoop
Case $msg = $b_Exit ; нажали кнопку "Выйти"
ExitLoop
Case $msg = $b_Enter ; нажали кнопку "Задать"
    $wait = GUICtrlRead($num)
   if $wait>0 and $wait<11 Then
      MsgBox (0, "!!!!!","Well done")
   else
      MsgBox (0, "!!!!!", "JackAss")
   EndIf
EndSelect

Собственно вопрос в том, как скрыть Gui после нажатия кнопки "Задать", т.е. что бы скрипт продолжил свое выполнение, но окно Gui не было видно.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Fallen,
Код:
#include <GuiConstantsEx.au3>

Global $bShow = True ;переменная, в которой хранится текущее состояние окна (True - отображается, False - скрыто)

$hGui = GUICreate('Вызов из MT4', 450, 100)

$iNum = GUICtrlCreateInput(Random(1, 100, 1), 70, 70, 100, 20);поле ввода со случайным целым значением от 1 до 100 (для примера)
$iEnter = GUICtrlCreateButton('Задать', 170, 70, 60, 20)
$iExit = GUICtrlCreateButton('Выйти', 230, 70, 100, 20)
GUISetState()
HotKeySet('!1', '_ShowGui');Alt+1 ShowGui - горячая клавиша для вызова функции _ShowGui()

While 1
	Switch GUIGetMsg();опрос сообщений от окна
		Case $GUI_EVENT_CLOSE, $iExit; нажат Х или кнопка Выйти
			Exit
		Case $iEnter ; нажата кнопка Задать
			ConsoleWrite('Input data: ' & GUICtrlRead($iNum) & @LF); пишем в консоль значение из поля ввода (для примера)
			$bShow = False ;присваиваем переменной значение False и
			GUISetState(@SW_HIDE, $hGui); скрываем окно.
	EndSwitch
WEnd

Func _ShowGui();функция, показыающая окно, только если оно скрыто
	If $bShow Then Return; если окно отображается, то выход из функции
	$bShow = True;присваиваем переменной значение True и
	GUISetState(@SW_SHOW, $hGui);отображаем окно
	GUICtrlSetData($iNum, Random(1, 100, 1));для примера меняем значение в поле ввода на случайное целое значение от 1 до 100
EndFunc   ;==>_ShowGui
 
Автор
F

Fallen

Новичок
Сообщения
39
Репутация
0
Для меня такой скрипт слишком сложным оказался =)) Если не возражаете, я закомментирую все, а вы поправите, если в чем-то ошибся
Код:
#include <GuiConstantsEx.au3>

Global $bShow ;; Глобальная переменная

$hGui = GUICreate('Вызов из MT4', 450, 100) ;; Переменная с вызовом окна

GUICtrlCreateLabel('1', 20, 10)
GUICtrlCreateLabel('2 ', 10, 30)
GUICtrlCreateLabel('3', 35, 50)
$iNum = GUICtrlCreateInput(Random(1, 20, 1), 70, 70, 100, 20) ; Тут не понял, зачем обязательно
;; Назначать рандомное значение отступа слева
$iEnter = GUICtrlCreateButton('Задать', 170, 70, 60, 20)
$iExit = GUICtrlCreateButton('Выйти', 230, 70, 100, 20)
GUISetState()
HotKeySet('!1', '_ShowGui');Alt+1 ShowGui - Назначаем быстрые кнопки на вызов окна

While 1
    Switch GUIGetMsg() ;; плохо понял - Примерно - опрашиваем окно на действующее значение
        Case $GUI_EVENT_CLOSE, $iExit ; Закрываем программу через х
            Exit
        Case $iEnter
            ConsoleWrite(GUICtrlRead($iNum) & @LF) ;; не понял - примерно - считываем значение номера
            $bShow = False ; Объявляем значение переменной bShow - не действительным
            GUISetState(@SW_HIDE, $hGui) ;; Прячем окно
    EndSwitch
WEnd

Func _ShowGui() ; Задаем новую функцию на проверку $bShow
    If Not $bShow Then ;; Вообще не понял.. Что значит если не bShow?
        $bShow = True ; Снова не понял - Тогда значение bShow- действительно
        GUISetState(@SW_SHOW, $hGui) ;; Включаем отображение окна
    EndIf
EndFunc   ;==>_ShowGui ;; Завершаем функцию




Добавлено:
Сообщение автоматически объединено:

Огромное спасибо, вы меня постоянно выручаете, разбираясь с вашим скриптом, нашел решение проще. У меня не настолько большая программа, что бы вводить столько переменных и выполнять столько проверок. Хватило всего
Код:
GUISetState(@SW_HIDE)
в описании действия скрипта после нажатия на кнопку, и показ по завершению =) Еще раз огромное спасибо за внимание. И, если не затруднит, все таки подскажите с описанным вами скриптом, в чем ошибся, что понял не правильно?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Fallen [?]
И, если не затруднит, все таки подскажите с описанным вами скриптом, в чем ошибся, что понял не правильно?
Что не понятно конкретно?
 
Автор
F

Fallen

Новичок
Сообщения
39
Репутация
0
В своем предыдущем сообщении я закоменнтировал весь ваш код, просмотрите пожалуйста комментарии и подскажите в чем ошибся =)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Fallen,
Я добавил комментарии в свой код.
 
Автор
F

Fallen

Новичок
Сообщения
39
Репутация
0
Огромное спасибо за оперативную помощь =) постараюсь сделать еще +1 к рейтингу =)
 
Верх