Что нового

[Элементы GUI] Как реализовать работу в нескольких окнах

NONer

Новичок
Сообщения
27
Репутация
0
Здравствуйте.

Совсем недавно начал изучать AutoIt, и в первой же задаче столкнулся с проблемами:

Это мой скрипт:
Код:
; Подключение модулей
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

;Переменная папки-исходника
$Folder_Path = "C:\Temp"

;Переменная папки назначения - Татьяна
$Folder_Path_Tatyana = "D:\Temp\Татьяна"

;Переменная папки назначения - Белла
$Folder_Path_Bella = "D:\Temp\Белла"

;Переменная папки назначения - Лариса
$Folder_Path_Larisa = "D:\Temp\Лариса"

;Переменная папки назначения - Алина
$Folder_Path_Alina = "D:\Temp\Алина"

; Создание окна
GUICreate("Копирование базы", 400, 200, -1, -1) ; Главное окно
GUISetIcon("C:\Windows\System32\shell32.dll", -131) ; Указание иконки окна
GUISetFont(10, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта

; Кнопка выбора папки
$Path_Button = GUICtrlCreateButton('-', 359, 27, 26, 26, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()

; Кнопка "Начать копирование"
$Start_Copy = GUICtrlCreateButton("Начать копирование", 143, 165, 251, 25)

; Чекбокс "Таня"
$Check_Tatyana = GUICtrlCreateCheckbox("Татьяна", 22, 91, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)

; Чекбокс "Белла"
$Check_Bella = GUICtrlCreateCheckbox("Белла", 22, 115, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)

; Чекбокс "Лариса"
$Check_Larisa = GUICtrlCreateCheckbox("Лариса", 22, 139, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)

; Чекбокс "Алина"
$Check_Alina = GUICtrlCreateCheckbox("Алина", 22, 162, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)

; Рамка назначения копирования
$Border_Output = GUICtrlCreateGroup("Куда копировать", 8, 69, 129, 121)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Путь к папке
$Path_Input = GUICtrlCreateInput($Folder_Path, 16, 28, 337, 24)
GUICtrlSetState(-1, $GUI_DISABLE) ; Делаем поле "Только для чтения"
GUICtrlSetLimit(-1, 250) ; Длина строки
GUICtrlSetFont(-1, 10, 400, 0, "Verdana") ; Параметры шрифта

; Рамка указания папки
$Border_Path = GUICtrlCreateGroup("Откуда копировать", 8, 8, 385, 57)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Рамка описания
$Border_Content = GUICtrlCreateGroup("Примечание", 144, 69, 249, 89)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Текст описания
$Text_Content_001 = GUICtrlCreateLabel("Данная программа копирует базу", 153, 90, 230, 20)
$Text_Content_002 = GUICtrlCreateLabel("из указанной выше папки", 153, 108, 231, 20)
$Text_Content_002 = GUICtrlCreateLabel("на сервера всех филиалов.", 153, 128, 230, 20)

; Параметр вывода экрана поверх всех окон
GUISetState(@SW_SHOW)

While 1
	; Проверка нажатий клавиш
    $hMsg = GUIGetMsg()
	Select
		; Закрытие окна программы
		Case $hMsg = $GUI_EVENT_CLOSE
            Exit

		; Нажата кнопка выбора каталога
		Case $hMsg = $Path_Button
            $Folder_Input = FileSelectFolder('Окуда копировать базу', $Folder_Path, -1, @ScriptDir)
			; Если пользователь не нажал отмену или не закрыл окно выбора каталога, то заносим полученный путь в поле ввода
            If $Folder_Input <> '' Then  GUICtrlSetData($Path_Input, $Folder_Input)

			; Проверка наличия файлов в папке
			$search = FileFindFirstFile($Folder_Input & "\*.*") ; Поиск первого файла в папке
			If $search = -1 Then
				MsgBox(16, "Ошибка", "В указанной папке:  " & $Folder_Input & "  нет файлов!" & @CRLF & @CRLF & "Выберите другую папку.")
			EndIf

		; Нажата кнопка копирования файлов
		Case $hMsg = $Start_Copy

			; Проверка наличия файлов в папке перед началом копирования
			$search = FileFindFirstFile($Folder_Input & "\*.*") ; Поиск первого файла в папке
			If $search = -1 Then
				MsgBox(16, "Ошибка", "В указанной папке:  " & $Folder_Input & "  нет файлов!" & @CRLF & @CRLF & "Программа будет принудительно завершена.")
				Exit
			EndIf

			; Закрытие главного окна
			GUISetState(@SW_HIDE)

			; Берем путь папки-исходника
			$sFolder = GUICtrlRead($Path_Input)

			; Копирование - Татьяна - если отмечено
			If GUICtrlRead($Check_Tatyana) = 1 Then

				; Здесь необходимо открыть окно, где отобразить процесс копирования

			EndIf

			; Копирование - Белла - если отмечено
			If GUICtrlRead($Check_Bella) = 1 Then

				; Здесь необходимо открыть окно, где отобразить процесс копирования

			EndIf

			; Копирование - Лариса - если отмечено
			If GUICtrlRead($Check_Larisa) = 1 Then

				; Здесь необходимо открыть окно, где отобразить процесс копирования

			EndIf

			; Копирование - Алина - если отмечено
			If GUICtrlRead($Check_Alina) = 1 Then

				; Здесь необходимо открыть окно, где отобразить процесс копирования

			EndIf



			; Вывод сообщений об окончании копирования
			TrayTip("Копирование баз завершено", "Не забудьте провести индексацию", 7, 1)
			MsgBox(64, "Копирование баз", "Копирование файлов завершено." & @CRLF & "Необходимо провести индексацию на указанных ранее серверах.")
			WinClose("Копирование баз", "")
	EndSelect
WEnd


Мне необходимо вот что: в первом окне я задаю некие параметры для копирования файлов на удаленные компьютеры. далее после нажатия кнопки "Начать копирование" первое окно закрывается, открывается второе и на нем отображается инофрмация об успешности или ошибках копирования, а также о завершении задачи (плюс всплывающее сообщение в системной панели).

Вот что не получается:
- Как реализовать работу с несколькими окнами? Msgbox и SplashTextOn не предлагайте - это не подходит. Возможен вариант работы в одном окне, но я не знаю как это сделать.
- Не совсем разобрался с проверкой папки на наличие файлов (мой код в скрипте некорректно работает). Если поможете в этом, буду признателен.
- Представленный мной код явно выглядит коряво. я еще не разбирался с массивами и функциями, так что если есть предложения по оптимизации, буду рад выслушать.
 
Верх