Что нового

[Окна, Диалоги] вынос параметров в диалоговое окно

Tosyk

Новичок
Сообщения
206
Репутация
0
Версия AutoIt: 3.4.1

Описание:
Здравствуйте,

есть код, который конвертирует изображение через внешнюю консольную программу с параметрами:
Код:
#include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

Local $sPattern = "\.(?i:dds)"

If $CmdLine[0] <> 0 Then
    If FileExists("C:\Program Files\ImageMagick\tools\texconv.exe") Then
        ProgressOn("Converting", "", "0%")

        For $i = 1 To $CmdLine[0]
            $sSourceFile = $CmdLine[$i]

            ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

            If FileExists($sSourceFile) Then
                _PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)

             If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
                    $sExePath = '"C:\Program Files\ImageMagick\tools\texconv.exe"'
                    $sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
                    $sDestPath = '"' & $sDrive & '\' & StringTrimRight($sFolder, 1) & '\\' & '"'
                    $sSourceFile = '"' & $sSourceFile & '"'
                    $sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
                    ;MsgBox(0, '', $sRunWait) ; отладка

					 RunWait($sRunWait, "", @SW_HIDE)
;~                     RunWait($sRunWait)
             Else
                 ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
             EndIf
            Else
                MsgBox(0, '', "File [" & $sSourceFile & "] not found")
            EndIf
        Next

        ProgressSet(100, "Converting complete", "100%")

        Sleep(1000)
        ProgressOff()
    EndIf
Else
    MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
    ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit (0)


подскажите как вынести эти параметры (-y -f R8G8B8A8_UNORM -ft tga -o) отдельными переменными в диалоговое окно: если, допустим, галочка стоит (или поле заполнено), то параметр используется - в противном случае параметр игнорируется.
А так же, чтобы параметры сохранялись в этом окне при любом количестве открытий/закрытий окошка до того момента пока их не поменяют и не нажмут ОК.

меня перенаправили отсюда: http://autoit-script.ru/index.php?topic=26049.msg145336#msg145336

примерный вид желаемого окна вот такое:
 

Вложения

  • gui.png
    gui.png
    14.8 КБ · Просмотры: 9

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Возможно и глупость , но я себе представил так (набросал только принцип выбора параметров из CheckBox):
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 278, 239, 205, 139)
$Group1 = GUICtrlCreateGroup("Ïàðàìåòðû", 8, 8, 257, 169)
$Checkbox1 = GUICtrlCreateCheckbox("-y", 16, 32, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("-f", 16, 56, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("R8G8B8A8_UNORM", 16, 80, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("-ft", 16, 104, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("tga", 16, 128, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("-o", 16, 152, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("OK", 8, 184, 163, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			Local $sParam = ''
			For $i = 1 To 6
				$CheckBox = Eval('Checkbox' & $i)
				If GUICtrlRead($CheckBox) = $GUI_CHECKED Then $sParam &= ' ' & GUICtrlRead($CheckBox, 1)
			Next
			
			;В Итоге в переменной строка с параметрами:
			MsgBox(0, '', $sParam)
			
	EndSwitch
WEnd
Сохранение выбранных CheckBox для последующих запусков легко реализовать через ini файл
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
я так понимаю тут идёт какой-то перебор чекбоксов у вас, но мне не понятно как выцепить конкретный чекбокс? или поле для ввода?
я умудрился правильно вставить свой код в ваш. отрабатывает вроде правильно: при перетаскивании файлов на прогу открывается окошко с параметрами, и после ОК происходит конверт, только понятно ничего не конвертируется:

Код:
#include <File.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 278, 239, 205, 139)
$Group1 = GUICtrlCreateGroup("Ia?aiao?u", 8, 8, 257, 169)
$Checkbox1 = GUICtrlCreateCheckbox("-y", 16, 32, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("-f", 16, 56, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("R8G8B8A8_UNORM", 16, 80, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("-ft", 16, 104, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("tga", 16, 128, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("-o", 16, 152, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("OK", 8, 184, 163, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

AutoItSetOption("MustDeclareVars", 1)

Local $i, $nMsg, $CheckBox, $sParam
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

Local $sPattern = "\.(?i:dds|jpg)"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            Local $sParam = ''
            For $i = 1 To 6
                $CheckBox = Eval('Checkbox' & $i)
                If GUICtrlRead($CheckBox) = $GUI_CHECKED Then $sParam &= ' ' & GUICtrlRead($CheckBox, 1)
            Next

			   If $CmdLine[0] <> 0 Then
				   If FileExists("C:\Program Files\ImageMagick\tools\texconv.exe") Then
					   ProgressOn("Converting", "", "0%")

					   For $i = 1 To $CmdLine[0]
						   $sSourceFile = $CmdLine[$i]

						   ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

						   If FileExists($sSourceFile) Then
							   _PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)

							If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
								   $sExePath = '"C:\Program Files\ImageMagick\tools\texconv.exe"'
								   $sParams = $sParam & '-f R8G8B8A8_UNORM -ft tga -o'
								   $sDestPath = '"' & $sDrive & '\' & StringTrimRight($sFolder, 1) & '\\' & '"'
								   $sSourceFile = '"' & $sSourceFile & '"'
								   $sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
								   ;MsgBox(0, '', $sRunWait) ; отладка

									RunWait($sRunWait, "", @SW_HIDE)
			   ;~                     RunWait($sRunWait)
							Else
								ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
							EndIf
						   Else
							   MsgBox(0, '', "File [" & $sSourceFile & "] not found")
						   EndIf
					   Next

					   ProgressSet(100, "Converting complete", "100%")

					   Sleep(1000)
					   ProgressOff()
				   EndIf
			   Else
				   MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
				   ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
			   EndIf

			   Exit (0)


            ;В Итоге в переменной строка с параметрами:
;~             MsgBox(0, '', $sParam)

    EndSwitch
WEnd


да, вот ещё, как объединить окошко прогресса с окошком параметров?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
если конвертер не один, то параметры запуска разные. Значит, можно использовать
Код:
GUICtrlCreateTab

каждая вкладка для своего конвертера. Кстати, возможно, некоторые параметры одного и того же конвертера могут быть не совместимы. Значит где-то будут не чекбоксы, а радио.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
скрипт должен работать только с одним конвертером - не хочется слишком городить.
задача скрипта быть быстро-конвертером. я создаю ярлыки в папке Send to для этих скриптов и вызываю для пачки файлов :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
для прогресса использовать
Код:
GUICtrlCreateProgress

вычислить сколько файлов приходится на один процент и при конвертировании устанавливать значение в прогрессбар. но это будет приблизительно. если конвертер дает в консоль проценты конвертирования, то можно вычислить общий процент. если нет, то только отталкиваться от количества.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
не получается все знания собрать в кучу, в скрипт. помогите пожалуйста :(
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вот это "R8G8B8A8_UNORM" будет меняться?


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

рабочий код
использовал файлы .jpg
Код:
#include <File.au3>
#include <Array.au3>
Opt("MustDeclareVars", 1)
If Not $CmdLine[0] Then
	MsgBox(16, 'Ошибка', 'Файлы не найдены')
	Exit
EndIf
Local $Form1 = GUICreate("Form1", 280, 300, -1, -1)
Local $Group1 = GUICtrlCreateGroup("Выбор параметров", 8, 8, 257, 169)
Local $Checkbox1 = GUICtrlCreateCheckbox("-y", 16, 32, 97, 17)
Local $Checkbox2 = GUICtrlCreateCheckbox("-f", 16, 56, 97, 17)
Local $Checkbox3 = GUICtrlCreateCheckbox("R8G8B8A8_UNORM", 16, 80, 97, 17)
Local $Checkbox4 = GUICtrlCreateCheckbox("-ft", 16, 104, 97, 17)
Local $Checkbox5 = GUICtrlCreateCheckbox("tga", 16, 128, 97, 17)
Local $Checkbox6 = GUICtrlCreateCheckbox("-o", 16, 152, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Local $Group2 = GUICtrlCreateGroup("Статус", 8, 180, 257, 75)
Local $nAllFiles = GUICtrlCreateLabel('В очереди', 16, 200, 100, 20)
GUICtrlSetFont(-1, 9, 800, 0, "Georgia")
Local $nAllFiles1 = GUICtrlCreateLabel('', 123, 200, 140, 20)
GUICtrlSetFont(-1, 10, 800, 0, "Georgia")
GUICtrlSetColor(-1, 0xFF0000)
Local $nConvert = GUICtrlCreateLabel('Обработано', 16, 225, 100, 20)
GUICtrlSetFont(-1, 9, 800, 0, "Georgia")
Local $nConvert1 = GUICtrlCreateLabel('', 123, 225, 140, 20)
GUICtrlSetFont(-1, 10, 800, 0, "Georgia")
GUICtrlSetColor(-1, 0x008000)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Local $Button1 = GUICtrlCreateButton("OK", 8, 260, 50, 25)

GUISetState()
Global $aChkData[6][2] = [['-y', $Checkbox1], ['-f', $Checkbox2], ['R8G8B8A8_UNORM', $Checkbox3], ['-ft', $Checkbox4], ['tga', $Checkbox5], ['-o', $Checkbox6]]



While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button1
			Local $getres = _Convert($nAllFiles1, $nConvert1)
			Switch $getres
				Case 0
					Exit 0
				Case -1
					MsgBox(16, '', 'Параметры не выбраны', '', $Form1)
				Case Else
					_ArrayDisplay($getres, 'Файлы не найдены')
			EndSwitch

	EndSwitch
WEnd

Func _Convert($InFiles, $OutFiles)
	Local $aNotConv[0]
	Local $sPattern = "\.(?i:dds|jpg)"
	Local $sParam, $ncount, $not
	Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
	Local $sDrive, $sFolder, $sFileName, $sExt, $sRunWait
	For $i = 0 To 5
		If GUICtrlRead($aChkData[$i][1]) = 1 Then
			$sParam &= ' ' & $aChkData[$i][0]
		Else
			$not += 1
		EndIf
	Next
	If $not = 6 Then Return -1
	If FileExists("D:\Новая папка\ImageMagick\texconv.exe") Then
		Local $ncount = Number($CmdLine[0])
		GUICtrlSetData($InFiles, $ncount)
		For $i = 1 To $ncount
			$sSourceFile = $CmdLine[$i]
			_PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
			If FileExists($sSourceFile) Then
				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) Then
					$sExePath = 'D:\Новая папка\ImageMagick\texconv.exe'
					$sDestPath = '"' & $sDrive & '\' & StringTrimRight($sFolder, 1) & '"'
					$sSourceFile = '"' & $sSourceFile & '"'
					$sRunWait = $sExePath & " " & $sParam & " " & $sDestPath & " " & $sSourceFile
					RunWait($sRunWait, "", @SW_HIDE)
					GUICtrlSetData($InFiles, $ncount - $i)
					GUICtrlSetData($OutFiles, $i)
				Else
					ContinueLoop
				EndIf
			Else
				_ArrayAdd($aNotConv, $sSourceFile)
			EndIf
		Next
	EndIf
	If UBound($aNotConv) Then Return $aNotConv
EndFunc   ;==>_Convert
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
работает, но только с жепегом.
приложил файл DDS
 

Вложения

  • Section 108.zip
    4.2 КБ · Просмотры: 1

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ты какие параметры указываешь в окне?




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

нашел ошибку. поправил предыдущее сообщение.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
joiner сказал(а):
ты какие параметры указываешь в окне?
ставлю все галки для dds, а для жепега ставлю -ft и tga - он конвертирует в dds, но это детали, главное жепег он конвертирует
 
Верх