Что нового

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

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
Репутация
247
Возможно и глупость , но я себе представил так (набросал только принцип выбора параметров из 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,570
Репутация
632
если конвертер не один, то параметры запуска разные. Значит, можно использовать

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

Tosyk

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

joiner

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

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

Tosyk

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

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
вот это "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 КБ · Просмотры: 2

joiner

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




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

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

Tosyk

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