Что нового

Открытие и закрытие второй формы

Notum

Новичок
Сообщения
71
Репутация
0
Имеется один скрипт, который содержит одну формы, и есть второй скриптик, который содержит вторую форму.

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

Заранее спасибо.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Notum
Можно вот так, хотя есть и другие варианты...

1.au3
Код:
; НАЧАЛО

 $GUI=GUICreate("Первая форма",300,300)
 $BUTTON=GUICtrlCreateButton("Ok",0,250,300,50)

 GUISetState()

 while true

  switch GUIGetMsg()
   case -3
    exitloop
   case $BUTTON
    ShellExecute("2.au3")
  endswitch

 wend

; КОНЕЦ


2.au3
Код:
; НАЧАЛО

 $GUI=GUICreate("Вторая форма",300,300)
 $BUTTON=GUICtrlCreateButton("Ok",0,250,300,50)

 GUISetState()

 while true

  switch GUIGetMsg()
   case -3
    exitloop
   case $BUTTON
    exitloop
  endswitch

 wend

; КОНЕЦ
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
К сожалению не работает. Он при нажатии из первой формы, он почему то открывает второй файл в SciTe. Не то... :'(
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Notum
Я не предусмотрел это, так как не пользуюсь SCITE...

У тебя, вероятно, выставлено по умолчанию редактирование скрипта, а у меня - запуск...

Попробуй так:

Код:
ShellExecute("2.au3","","","run")
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
Спасибо, ваш способ - то, что надо! :smile:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Notum
Я просто стремился, чтобы скрипты были максимально независимы...
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
snoitaleR сказал(а):
Notum
Я просто стремился, чтобы скрипты были максимально независимы...

Поторопился я, при компиляции естественно не могу открыть вторую форму. Я видимо не так объяснился, что мне надо.
Есть два .au3 файла(1.au3 и 2.au3), в каждом из них своя форма. Идея такая, что из первой формы, открывается вторая форма (вторая может использовать переменные из первой и наоборот).

Я на самом деле думаю, что это очень даже тривиальная задача, просто я не так объяснился.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Notum
Для меня не тривиальная... :smile:
Но я подумаю...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А почему бы не сделать обе формы в одном .au3 (.exe), в противном случае это совсем нетривиальная задача.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
незнаю что надо но вот изменил код snoitaleR
первая форма form1.au3:
Код:
; НАЧАЛО

 $GUI=GUICreate("Первая форма",300,300)
 $BUTTON=GUICtrlCreateButton("Ok",0,250,300,50)
$data = GUICtrlCreateEdit(IniRead("conf.ini","dataset","data",""),10,10,260,120)
 GUISetState()

 while 1

  switch GUIGetMsg()
   case -3
    exitloop
case $BUTTON
   GUISetState(@SW_HIDE)
    RunWait("form2.exe")
   $data = GUICtrlCreateEdit(IniRead("conf.ini","dataset","data",""),10,10,260,20)
   GUISetState(@SW_SHOW)

  endswitch

 wend

; КОНЕЦ

и вторая форма form2.au3:
Код:
; НАЧАЛО

 $GUI=GUICreate("Вторая форма",300,300)
 $BUTTON=GUICtrlCreateButton("Ok",0,250,300,50)
 $data = GUICtrlCreateEdit("Данные ввести тут",10,10,260,120)
 GUISetState()

 while true

  switch GUIGetMsg()
   case -3
    exitloop
case $BUTTON
   IniWrite("conf.ini","dataset","data",GUICtrlRead($data))
    exitloop
  endswitch

 wend

; КОНЕЦ


оба скомпилировать в одну папку и запустить form1.exe

Yashied [url_ex=javascript:qq.OpenLink('[url=http://autoit-script.ru/index.php?topic=1669.msg11917#msg11917%27]Re: Открытие и закрытие второй формы)][?][/url_ex]
А почему бы не сделать обе формы в одном .au3 (.exe), в противном случае это совсем нетривиальная задача.

тоже так думаю, что лучше как функцию вызывать вторую форму, а переменные использовать глобальные...
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
Всем спасибо за дельные ответы! Сегодня же примусь за эксперименты!
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
Начал переписывать по вашему совету, засунул создание второй формы в функцию, вроде работает, но вот с какими проблемами/вопросами я столкнулся:

1) как правильно (грамотно) сделать закрытие второй формы? - при нажатии на крестик - закрывается обе формы
2) как правильно (грамотно) сделать слежение за тем, какие кнопки были нажаты из второй формы?
3) после того, как я засунул создание формы в функцию, пропала возможность использовать переменных, которые находятся во второй форме. Вы сказали, что надо использовать глобальные переменные, можно по подробнее и по возможности на примере?
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Notum
Думать за других, когда видишь код и описание проблемы перед или после него - гораздо проще и быстрее получить более точный ответ.
 
Автор
N

Notum

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


$Form1 = GUICreate("Form1", 183, 110, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 8, 24, 121, 21)
$Button1 = GUICtrlCreateButton("Open Form 2", 8, 64, 75, 25)
GUISetState(@SW_SHOW)

While 1
	$msg=GuiGetMsg()
	If $msg=-3 Then Exit
	If $msg = $Button1 Then CreateForm2()
	If $msg = $Button2 Then GUISetState($Form2, @SW_HIDE)
WEnd

Func CreateForm2()
$Form2 = GUICreate("Form2", 182, 109, 402, 123)
$Input2 = GUICtrlCreateInput("Input2", 8, 24, 121, 21)
$Button2 = GUICtrlCreateButton("Close Form 2", 8, 64, 75, 25)
GUISetState(@SW_SHOW)
EndFunc


Вопросы всё те же...
 

bulldog5293

Знающий
Сообщения
172
Репутация
10
Зачем ты вторую форму через функцию создаёш, когда у тебя первая без функции? Щас отыщу и кину скрипт как без функции 2 формы делать
 

bulldog5293

Знающий
Сообщения
172
Репутация
10
Вот он
Код:
#include <GUIConstantsEx.au3>

$BminerFrm = GUICreate("Miner", 365, 225, 454, 126)

$btShow= GUICtrlCreateButton("1", 64, 32, 75, 25)

$GUI2 =  GUICreate ( "Введите ваши данные", 242, 192, 192, 124,'', '', $BminerFrm ) ; Установив принадлежность к $BminerFrm 
$BUTTON = GUICtrlCreateButton("2", 64, 32, 75, 25)
GUISetState(@SW_SHOW, $BminerFrm)

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $btShow
         ShowWindow()  
    case $BUTTON
     GUISetState(@SW_Hide, $GUI2)
   EndSwitch
WEnd

Func  ShowWindow()
   GUISetState(@SW_SHOW, $GUI2)
EndFunc



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

На справку, за спс тут ещё и +1 ставят
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
bulldog5293 сказал(а):
Вот он
Код:
#include <GUIConstantsEx.au3>

$BminerFrm = GUICreate("Miner", 365, 225, 454, 126)

$btShow= GUICtrlCreateButton("1", 64, 32, 75, 25)

$GUI2 =  GUICreate ( "Введите ваши данные", 242, 192, 192, 124,'', '', $BminerFrm ) ; Установив принадлежность к $BminerFrm 
$BUTTON = GUICtrlCreateButton("2", 64, 32, 75, 25)
GUISetState(@SW_SHOW, $BminerFrm)

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $btShow
         ShowWindow()  
    case $BUTTON
     GUISetState(@SW_Hide, $GUI2)
   EndSwitch
WEnd

Func  ShowWindow()
   GUISetState(@SW_SHOW, $GUI2)
EndFunc



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

На справку, за спс тут ещё и +1 ставят




Огромное спасибо. Это то, что я как и хотел.
Реализация главного и дочернего меню!
 
Верх