; Универсальное окно
#Include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <StaticConstants.au3>
$presskey = BitOR(_IsPressed('10'), 2 * _IsPressed('11'), 4 * _IsPressed('12'))
$codeKey = 0
$criptArchive = 0
$criptHdr = 1
$PassWord = "PassWord"
$inputPass = ""
$allWinSFX = 8
$v56 = 'Это не окно вашего архива'
$v57 = 'Закрыть все окна архива'
$v58 = 'сразу'
$v64 = "c"
$v82 = "Шифрование"
$v83 = "Шифровать архив"
$v84 = "Шифровать заголовки файлов"
$v85 = "Введите пароль"
_Window("!!! " & $v56 & " !!!", $v57 & " (" & $allWinSFX & ") " & $v58 & "? ", "OK", 1, 1, 0, @DesktopWidth - 280, @DesktopHeight - 145, 10)
;$Title="Архивирование папок/файлов"
;$Text="Размер выделенных папок/файлов" & @TAB & "20 123 456 789" & @LF & "Выбранный размер словаря (МБ)" & @TAB & "32" & @LF & "Выбранный метод сжатия" & @TAB & "LZMA" & @LF & @LF & "1. Создать solid архив с максимальным сжатием" & @LF & "2. Создать non-solid архив" & @LF & "3. Создать архив без сжатия" & @LF & "4. Создать solid архив с максимальным сжатием" & @LF & " консольным архиватором"
;$TextButton="1 вариант" & @TAB & "2 вариант" & @TAB & "3 вариант" & @TAB & "4 вариант" & @TAB & "Отмена"
;_Window($Title,$Text,$TextButton,1,5,1,-1,-1,10)
;$TextButton="1 вариант" & @TAB & "2 вариант" & @TAB & "3 вариант"
;_Window($Title,$Text,$TextButton,4)
;_Window($Title,$Text,$TextButton,3)
;_Window($Title,$Text,$TextButton,2)
Exit
;----------------------------------------------------------------------
Func _Window($Title,$Text,$TextButton,$Icon=2,$Focus=1,$Pass=0,$pozX=-1,$pozY=-1,$timer=0)
; универсальное окно
Opt('MouseCoordMode', 2)
$nDefButton = ''
; число строк
$array = StringSplit($Text, @LF)
; расчет ширины окна по самой длинной строке
$widthWind = 0
For $i = 1 To $array[0]
$space = StringSplit($array[$i], @TAB, 1)
$width = StringLen($array[$i])*5.65 + 60 + $space[0]*10; - ($space[0]*0.65)
If $widthWind < $width Then $widthWind = $width
Next
; расчет ширины окна по числу кнопок
$buttons = StringSplit($TextButton, @TAB)
$widthButton = 65
$step = 5
If $step*($buttons[0]+1)+$widthButton*$buttons[0] > $widthWind Then
$widthWind = $step*($buttons[0]+1)+$widthButton*$buttons[0]
$leftotstup = 0
Else
$leftotstup = ($widthWind-$widthButton*$buttons[0]-$step*($buttons[0]-1))/2
EndIf
; расчет высоты окна
$textHeight = $array[0]*16+15
$heightWind = $textHeight+40
If $Pass Then $heightWind+=85
; создание окна
$hGui = GUICreate($Title, $widthWind+6, $heightWind + 30, $pozX, $pozY, $WS_SYSMENU)
; задание иконки и шрифта для окна
GUISetFont(8.5, 400, 0, "Tahoma")
; GUISetIcon("Button.exe")
; Вывод кнопок с центрированием
For $i = 1 To $buttons[0]
$button=GUICtrlCreateButton($buttons[$i], $leftotstup+$step*$i+$widthButton*($i-1), $heightWind-35, $widthButton, 25)
If $i = $Focus Then
GUICtrlSetState(-1, BitOR($GUI_FOCUS, $GUI_DEFBUTTON))
$focButW = $leftotstup+$step*$i+$widthButton*($i-1)+$widthButton/2
$focButH = $heightWind-35+25/2
$nDefButton = $button
$sDefButtonText = $buttons[$i]
EndIf
Next
; Вывод Текста
For $i = 1 To $array[0]
$subline = StringSplit($array[$i], @TAB)
GUICtrlCreateLabel($subline[1], 50, 10+16*($i-1), $widthWind-60)
If $subline[0] > 1 Then
$widthNumber = StringLen($subline[2])*5.65 + 5
GUICtrlCreateLabel($subline[2], 50 + $widthWind-60 - $widthNumber, 10+16*($i-1), $widthNumber, -1, $SS_RIGHT)
EndIf
Next
; Вывод поля Шифрование
If $Pass Then
GUICtrlCreateGroup($v82, 5, $textHeight, $widthWind-10, 85)
; CHECKBOX
$check1 = GuiCtrlCreateCheckbox($v83, 15, $textHeight+20, $widthWind-25, 14)
$nextfield=$GUI_DISABLE
If $criptArchive = 1 Then
$nextfield=$GUI_ENABLE
GUICtrlSetState(-1, $GUI_CHECKED)
EndIf
; CHECKBOX
$check2 = GuiCtrlCreateCheckbox($v84, 15, $textHeight+40, $widthWind-25, 14)
If $criptHdr = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlSetState(-1, $nextfield)
; INPUT
$input1 = GUICtrlCreateLabel($v85 & ":", 15, $textHeight+60)
GUICtrlSetState(-1, $nextfield)
$input2 = GuiCtrlCreateInput($PassWord, 105, $textHeight+60-3, $widthWind-120, 20)
GUICtrlSetState(-1, $nextfield)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
EndIf
; Вывод иконки: 1 - !, 2 - ?, 3 - X, 4 - i
GUICtrlCreateIcon("user32.dll", $Icon + 100, 10, 10)
GUISetState() ; display the GUI
; Вывод звука иконки
If $Icon = 1 Then $iMessageBeep = 0x00000030
If $Icon = 2 Then $iMessageBeep = -1
If $Icon = 3 Then $iMessageBeep = 0x00000010
If $Icon = 4 Then $iMessageBeep = 0x00000040
DllCall("user32.dll", "int", "MessageBeep", "int", $iMessageBeep)
; перевод мышки на кнопку в фокусе
If $presskey >0 Then
WinSetOnTop($hGui, "", 1)
If RegRead("HKCU\Control Panel\Mouse", "SnapToDefaultButton") = 1 Then MouseMove($focButW, $focButH, 0)
EndIf
; таймер
If $timer > 0 Then
$iCounter = $timer
$timer = TimerInit()
GUICtrlSetData($nDefButton, $sDefButtonText & ' (' & $iCounter & ' ' & $v64 & ')')
EndIf
Do
$codeKey = GUIGetMsg()
If $timer > 0 Then
If TimerDiff($timer) >= 1000 Then
$timer = TimerInit()
$iCounter -= 1
If $iCounter <= 0 Then $codeKey = $GUI_EVENT_CLOSE
GUICtrlSetData($nDefButton, $sDefButtonText & ' (' & $iCounter & ' ' & $v64 & ')')
EndIf
If _IsPressed('25') + _IsPressed('27') > 0 Then
GUICtrlSetData($nDefButton, $sDefButtonText)
$timer = 0
EndIf
EndIf
If $Pass AND $codeKey = $check1 Then
$nextfield=$GUI_DISABLE
If GUICtrlRead($check1) = $GUI_CHECKED Then $nextfield=$GUI_ENABLE
GUICtrlSetState($check2, $nextfield)
GUICtrlSetState($input1, $nextfield)
GUICtrlSetState($input2, $nextfield)
EndIf
If $codeKey = $GUI_EVENT_CLOSE Then
$codeKey = $buttons[0]
Else
$codeKey -= 2
EndIf
Until $codeKey > 0 AND $codeKey <= $buttons[0]
$criptArchive = 0
$criptHdr = 0
$inputPass = ""
If $Pass Then
If GUICtrlRead($check1) = $GUI_CHECKED Then $criptArchive = 1
If GUICtrlRead($check2) = $GUI_CHECKED Then $criptHdr = 1
$inputPass = GUICtrlRead($input2)
EndIf
GUIDelete()
EndFunc ;==> _Window()