Что нового

[Окна, Диалоги] Как включить в проект несколько форм?

AngryPo

Новичок
Сообщения
3
Репутация
1
Здравствуйте. Только начал изучать Autoit. :IL_AutoIt_1:
Никак не могу понять как работать с несколькими формами.

Проблема в следующем:
-есть скрипт выводящий основную форму
Код:
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=h:\soft\autoit3\koda\forms\Nminerfrm.kxf
$BminerFrm = GUICreate("Miner", 365, 225, 454, 126)
GUISetBkColor(0x316AC5)
GUISetOnEvent($GUI_EVENT_CLOSE, "BminerFrmClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "BminerFrmMinimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "BminerFrmMaximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "BminerFrmRestore")
$Label1 = GUICtrlCreateLabel("Welcome to the Chinese Miner", 64, 8, 220, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUICtrlSetOnEvent(-1, "Label1Click")
$OpenLinkBtn = GUICtrlCreateButton("Перейти к сайту", 8, 64, 131, 25, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, "OpenLinkBtnClick")
$DwnBtn = GUICtrlCreateButton("Загрузить файлы", 8, 96, 131, 25, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, "DwnBtnClick")
$ExitBtn = GUICtrlCreateButton("Выход", 8, 192, 131, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "ExitBtnClick")
$AboutBtn = GUICtrlCreateButton("О программе", 225, 192, 131, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "AboutBtnClick")
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\" & "miner.jpg", 160, 32, 196, 140, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUICtrlSetOnEvent(-1, "Pic1Click")
$mineBtn = GUICtrlCreateButton("Выкопать данные", 8, 128, 131, 25, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, "mineBtnClick")
$toolingBtn = GUICtrlCreateButton("Настроить", 8, 32, 131, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "toolingBtnClick")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $site = "", $login = "", $pass=""

While 1
	Sleep(100)
WEnd
-по нажатию на кнопку "настроить" нужно вывести диалоговое окно:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=h:\soft\autoit3\koda\forms\lognpassdlg.kxf
$LognPassDlg = GUICreate("Введите ваши данные", 242, 192, 192, 124)
GUISetBkColor(0x316AC5)
GUISetOnEvent($GUI_EVENT_CLOSE, "LognPassDlgClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "LognPassDlgMinimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "LognPassDlgMaximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "LognPassDlgRestore")
$LoginEd = GUICtrlCreateInput("", 40, 72, 153, 21)
GUICtrlSetOnEvent(-1, "LoginEdChange")
$PassEd = GUICtrlCreateInput("", 40, 112, 153, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
GUICtrlSetOnEvent(-1, "PassEdChange")
$Ok = GUICtrlCreateButton("Ok", 40, 144, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "OkClick")
$Cancel = GUICtrlCreateButton("Cancel", 120, 144, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "CancelClick")
$Label1 = GUICtrlCreateLabel("Login", 40, 56, 30, 17)
GUICtrlSetOnEvent(-1, "Label1Click")
$Label2 = GUICtrlCreateLabel("Password", 40, 96, 50, 17)
GUICtrlSetOnEvent(-1, "Label2Click")
$Input1 = GUICtrlCreateInput("http://blabla.ru", 40, 32, 153, 21)
GUICtrlSetOnEvent(-1, "Input1Change")
$Label3 = GUICtrlCreateLabel("Website", 40, 16, 43, 17)
GUICtrlSetOnEvent(-1, "Label3Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
 Sleep(100)
WEnd
-по нажатию на кнопку "Ок" нужно вернуть данные(из Edit'ов) в переменные
$site,$login,$pass основной формы

Вопрос: как вставить вызов диалога в основную форму и как закрыть диалог после работы с ним?

И ещё Koda создает формы типа blabla.kxf, я обычно просто копирую их код и вставляю в ScriptEditer..а можно как-то сами файлы прикреплять к скрипту?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
AngryPo
1. Есть тег AutoIt (у меня над смайликами, 3-й слева). Читать удобнее.
2. Создайте сразу оба окна
Код:
$BminerFrm = GUICreate("Miner", 365, 225, 454, 126)
;...
$LognPassDlg = GUICreate("Введите ваши данные", 242, 192, 192, 124)
;...
3. Потом покажите первое
Код:
GUISetState(@SW_SHOW, $BminerFrm)
4. Чтобы скрыть первое и показать второе
Код:
Func toolingBtnClick()
	GUISetState(@SW_HIDE, $BminerFrm)
	GUISetState(@SW_SHOW, $LognPassDlg)
	While 1
		Sleep(100)
	WEnd
EndFunc   ;==>toolingBtnClick
5. Считать данные можно так
Код:
$pass = GUICtrlRead($PassEd)
6. Про Koda не знаю.
 
Автор
A

AngryPo

Новичок
Сообщения
3
Репутация
1
Большое спасибо!Попробую
 

Lazycat

Осваивающий
Сообщения
46
Репутация
21
AngryPo сказал(а):
И ещё Koda создает формы типа blabla.kxf, я обычно просто копирую их код и вставляю в ScriptEditer..а можно как-то сами файлы прикреплять к скрипту?
Не то чтобы прикреплять - можно связывать. В примере выше, в строчке
Код:
#Region ### START Koda GUI section ### Form=h:\soft\autoit3\koda\forms\Nminerfrm.kxf
прописано имя формы. Если открыть файл au3 в Koda - откроются все найденные в нем формы. Либо, если скрипт лежит рядом с формой, то при открытии этой формы в Koda, скрипт будет найден и "привязан" к форме (в списке форм такая форма отображается с оверлейным значком свитка).
Что это даёт: если нажать в Koda Ctrl+U (или выбрать пункт меню), в связанном скрипте код соответствующей формы, заключенный в #Region .. #EndRegion, будет обновлен.
 
Автор
A

AngryPo

Новичок
Сообщения
3
Репутация
1
О офигеть! то что и было нужно,спасибо все работает...
 

bulldog5293

Знающий
Сообщения
172
Репутация
9
Уважаемый CreatoR я не считаю что тему можно ставить решоннй,неужеле в автоите нельзя сделать так что бы когда второе окно идёт через ф-ии оно не отображалась бы в панели задач как второе окно? Просто у меня второе окно идёт через ф-ии и когда я вызываю через основное то оно отображается на панеле задач как второе приложение
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
bulldog5293 [?]
неужеле в автоите нельзя сделать так что бы когда второе окно идёт через ф-ии оно не отображалась бы в панели задач как второе окно?
Можно так :
Код:
#include <GUIConstantsEx.au3>

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

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

$LognPassDlg =  GUICreate ( "Введите ваши данные", 242, 192, 192, 124,'', '', $BminerFrm ) ; Установив принадлежность к $BminerFrm 

GUISetState(@SW_SHOW, $BminerFrm)

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
	  Case $GUI_EVENT_CLOSE
		 Exit
	  Case $btShow
		 ShowWindow()  
   EndSwitch
WEnd

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
bulldog5293 [?]
я не считаю что тему можно ставить решоннй
Это было адресовано автору темы, ему решать, и судя по отзыву для него она решённая...
 

bulldog5293

Знающий
Сообщения
172
Репутация
9
Приветствую, тут я вопрос уже задавал, но не смог одного додумать, если имеется 2 GUI при нажатие кнопки в первом появляется второй не закрывая первый с параметром $BminerFrm, то как при нажатие кнопки в нём "Ok" закрыть его и вернуться обратно в первый GUI не закрывая всё?
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
А вот такой вариант?

Код:
; НАЧАЛО

 Global $GUI1,$GUI2

 Form1()

; Первая форма

 Func Form1()

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

  GUISetState(@SW_SHOW,$GUI1)

  while true

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

  wend

 EndFunc

; Вторая форма

 Func Form2()

  $GUI2=GUICreate("Вторая форма",300,300,100,100)
  Local $INPUT=GUICtrlCreateInput("",0,0,300,250)
  Local $BUTTON=GUICtrlCreateButton("Ok",0,250,300,50)

  GUISetState(@SW_SHOW,$GUI2)

  while true

   switch GUIGetMsg()
    case -3
     exitloop
    case $BUTTON
     GUIDelete($GUI2)
     Return
   endswitch

  wend

 EndFunc

; КОНЕЦ
 

bulldog5293

Знающий
Сообщения
172
Репутация
9
ТО что нада, спс


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

Так, а если позже повторно нужно будет запустить окно которое удалил по
Код:
case $BUTTON
GUIDelete($GUI2)
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
Если вызвать функцию Form2() еще раз, форма2 будет создана повторно...
 

bulldog5293

Знающий
Сообщения
172
Репутация
9
У меня GUI не через функции и поэтому я запутался как всё правельно раскидать тут тут
Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
		Case $GUI_EVENT_CLOSE
         Exit
	 Case $btShow;тут я вызываю второе GUI
         ShowWindow()
	  case $BUTTON1;тут я получается его удаляю
     GUIDelete($LognPassDlg) 
	EndSwitch
WEnd

Но если удаляю то потом оно второй раз не открывается :-\
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
В моем понимании, твоя функция ShowWindow() по смыслу совпадает с моей функцией Form2(), но внутри данной функции должен быть еще один обработчик событий, созданный через While - WEnd и $GUIGetMsg(), который и обработает закрытие формы2...
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
Можно посмотреть содержание функции ShowWindow()?
 

bulldog5293

Знающий
Сообщения
172
Репутация
9
Вот
Код:
#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
     GUIDelete($GUI2)	 
   EndSwitch
WEnd

Func  ShowWindow()
   GUISetState(@SW_SHOW, $GUI2)
EndFunc
 
Верх