Что нового

Не закрывается созданное через GUI-интерфейс окно

freakdragon

Новичок
Сообщения
4
Репутация
0
Создал скрипт, окрывающий окно и по времени либо нажатию кнопки Отмена закрывающий его

Код:
#include <GUIConstants.au3>
#include <date.au3>


Opt("GUICoordMode",1)
$mainwindow = GUICreate("Скрипт копирования БД", 300, 200)  ; will create a dialog box that when displayed is centered
$OKButton = GUICtrlCreateButton("OK", 70, 150, 60)
$CancelButton = GUICtrlCreateButton("Отмена", 160, 150, 60)
$Label = GUICtrlCreateLabel ("Через минуту, когда заполнится прогресс, начнется копирование БД."& _
@CR&"Для прерывания операции нажмите кнопку Отмена",  20, 35, 270, 100)
$EditBar = GUICtrlCreateEdit ("60",135, 85, 20, 20)
$ProgressBar = GUICtrlCreateProgress (25,110,240,20)



GUISwitch($mainwindow)
GUISetState(@SW_SHOW)
$i = @SEC
$DoubleProgress=0

While 1
	$msg = GUIGetMsg()
	If GUICtrlRead($EditBar) > 0 Then
		$j=@SEC

		If $i<>$j Then
			$DoubleProgress+=1.67
			GUICtrlSetData ($ProgressBar,$DoubleProgress)
			$i=$j
			GUICtrlSetData ($EditBar,GUICtrlRead($EditBar)-1)
		EndIf
		Sleep(25)
		Select
			Case $msg = $OKButton
				MsgBox(0, "GUI Event", "You pressed OK!")
			Case $msg = $CancelButton
				ExitLoop
				WinClose("Скрипт копирования БД")
			Case $msg = $GUI_EVENT_CLOSE
				ExitLoop
		EndSelect
	Else

		GUICtrlSetData ($Label,"Копирование началось")
		GUICtrlSetState ($EditBar, $GUI_HIDE)
		GUICtrlSetState ($OKButton, $GUI_HIDE)
		GUICtrlSetState ($CancelButton, $GUI_HIDE)
		$DoubleProgress=0
		GUICtrlSetData ($ProgressBar,$DoubleProgress)
		Sleep(1000)




		GUICtrlSetData ($Label,"Копирование успешно завершено")
		Sleep(1000)
		ExitLoop
		WinClose("Скрипт копирования БД")
	EndIf


WEnd


Поытался вставить его в другой скрипт. Теперь окно перестало закрываться

Код:
#include <Date.au3>
#include <Array.au3>
#include <File.au3>
#include <GUIConstants.au3>
Dim $nazv_predp[13]=["CKO", "GRO", "GVA", "RAU","RRZ", "RVC", _
"SDZ", "SFR", "SKO", "SKY", "SUR", "SUY", "SVA"];массив всех названий предприятий
Dim $nazv_pap_exe[3]=["personal", "wintu", "WinZ"];массив с названиями папок
$path_from='\\C-DGO-RDS01-MFS\data\cit_work\';начало пути для чтения
$path_to='\\C-DGO-RDS01-MFS\data\cit_ext\';начало пути для записи

$besk=1
While $besk <> 0;бесконечный цикл
	$tek_vr = @HOUR & "-" & @MIN;берем текущее время
	$asResult = StringRegExp($tek_vr, '(1[7-9]-[0-5][0-9])');если сейчас от 17-00 до 19-59, то переменной $asResult присвается значение 1
	if $asResult=1 Then

		$nazv_date_time=@MDAY&"."&@MON&"."&@YEAR&"_"&@HOUR&"-"&@MIN&"_1";уникальное имя папки, в которой будут храниться папки "personal", "wintu", "WinZ"

		Dim $NeedCopyPredp[13]=[1,1,1,1,1,1,1,1,1,1,1,1,1];нужно ли создавать копию для тек. предприятия (1-нужно, 0-не нужно)
		$NeedCopy=0;нужно ли вообще создавать копию (1-нужно, 0-не нужно)
		$prov="[0-9][0-9]."&@MON&"."&@YEAR&"*";регулярное выражение для проверки текущего месяца+года

#comments-start

		For $i=0 To 12 Step 1;перебор всех предприятий
			$aDirs = _FileListToArray($path_to&$nazv_predp[$i]&"\", "*", 2);сканируем папку i-го из предприятий на наличие папки с таким месяцем+годом
			If UBound($aDirs)<>1 Then;если папка i-го предприятия не пуста, то проверяем на наличие папки с данным месяцем+годом
				For $j=1 To UBound($aDirs)-1 Step 1;перебор всех папок i-го предприятия для сравнения
					If StringRegExp($aDirs[$j], $prov, 0) Then;если найдена папка с таким месяцем+годом, то создавать копию i-го предприятия не нужно
						$NeedCopyPredp[$i]=0
					EndIf
				Next
			EndIf
		Next


		For $i=0 To 12 Step 1
			If $NeedCopyPredp[$i]=1 Then
				$NeedCopy=1
			EndIf
		Next

#comments-end

		$NeedCopy=1; это потом убрать
		If $NeedCopy=1 Then

;вставка1_начало

			Opt("GUICoordMode",1)
			$mainwindow = GUICreate("Скрипт копирования БД", 300, 200)  ; will create a dialog box that when displayed is centered
			;GUISetOnEvent($GUI_EVENT_CLOSE, "CloseClicked")
			$OKButton = GUICtrlCreateButton("OK", 70, 150, 60)
			;GUICtrlSetOnEvent($OKButton, "OKButton")
			$CancelButton = GUICtrlCreateButton("Отмена", 160, 150, 60)
			;GUICtrlSetOnEvent($CancelButton, "CancelButton")
			$Label = GUICtrlCreateLabel ("Через минуту, когда заполнится прогресс, начнется копирование БД."& _
			@CR&"Для прерывания операции нажмите кнопку Отмена",  20, 35, 270, 100)
			$EditBar = GUICtrlCreateEdit ("60",135, 85, 20, 20)
			$ProgressBar = GUICtrlCreateProgress (25,110,240,20)

			GUISwitch($mainwindow)
			GUISetState(@SW_SHOW)
			$i = @SEC
			$DoubleProgress=0

;вставка1_конец


;вставка2_начало
			While 1
				;_NowTime()
				$msg = GUIGetMsg()
				If GUICtrlRead($EditBar) > 0 Then
					$j=@SEC

					;For $i = $s To 100
					If $i<>$j Then
						$DoubleProgress+=1.67
						;GUICtrlSetData ($ProgressBar,GUICtrlRead($ProgressBar)+1.67)
						GUICtrlSetData ($ProgressBar,$DoubleProgress)
						$i=$j
						GUICtrlSetData ($EditBar,GUICtrlRead($EditBar)-1)
					EndIf
					Sleep(25)
					;Next
					Select
						Case $msg = $OKButton
							MsgBox(0, "GUI Event", "You pressed OK!")
						Case $msg = $CancelButton
							;MsgBox(0, "GUI Event", "You pressed Cancel!")
							ExitLoop
							WinClose("Скрипт копирования БД")
						Case $msg = $GUI_EVENT_CLOSE
							ExitLoop
					EndSelect
				Else


					GUICtrlSetData ($Label,"Копирование началось")
					GUICtrlSetState ($EditBar, $GUI_HIDE)
					GUICtrlSetState ($OKButton, $GUI_HIDE)
					GUICtrlSetState ($CancelButton, $GUI_HIDE)

					$DoubleProgress=0
					GUICtrlSetData ($ProgressBar,$DoubleProgress)
;вставка2_конец


					For $i=0 To 12 Step 1;перебор всех предприятий
						If $NeedCopyPredp[$i]=1 Then;если нужна копия данного предприятия
							For $j = 0 to 2 Step 1;счетчик для перебора названий "personal", "wintu", "WinZ"
;вставка3_начало
								GUICtrlSetData ($Label,"Производится копирование"&$nazv_predp[$i]&"\"&$nazv_pap_exe[$j])

								Sleep(1000); это потом убрать
;вставка3_конец
;								DirCopy($path_from&$nazv_predp[$i]&'\'&$nazv_pap_exe[$j]&"\"&'exe', _;путь откуда копируем данные
;									$path_to&$nazv_predp[$i]&"\"&$nazv_date_time&'\'&$nazv_pap_exe[$j]&'\', 1);путь куда копируем данные
							Next
						EndIf
						$DoubleProgress+=7.7
						GUICtrlSetData ($ProgressBar,$DoubleProgress)
					Next

;вставка4_начало
				GUICtrlSetData ($Label,"Копирование успешно завершено")
				Sleep(1000)
				ExitLoop
				WinClose("Скрипт копирования БД")
				EndIf
			WEnd
;вставка4_конец

		EndIf

	EndIf
	Sleep (60000);спим час после проверки
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
freakdragon
окно должно быть одно. а функцию копирования поставь отдельно
примеров достаточно на форуме.
вот мой http://autoit-script.ru/index.php/topic,13191.0.html
 
Верх