Вспомогательные скрипты

Я не знаю, правильное ли название – "Вспомогательные" – я подобрал этим скриптам… Если бы я писал программу на Бейсике, я назвал бы их "подпрограммы", на Паскале – "процедуры", на С++ – "функции". Ну, программеры меня уже поняли, а для остальных после паузы сообщу – это, если подбирать синонимы, несамостоятельные, служебные скрипты. Их можно вызывать только из другого скрипта, передав информацию либо через параметры, либо через глобальные переменные.


ReadTabs

Имя файла (*.txt) Sub_ReadTabs.txt
Автор Вахмурка
Вызываемый плагин ini
Версия 1.2
Дата обновления 24.06.2008
ReadTabs
DebugCL
ParsePath
TreeDownCmd
TreeUpCmd
LowestDirCmd
MoveFile
Descript_ion
TMTC
Progress
args Single 
static Icons = "путь к библиотеке\TT.icl"

local Keys, Temp, i, Values, Tube, FT, BT
local Section = Single ++ "tabs"

local Path = ini.get(Config, Single, "path")
local Number = TT.Length
local Panel = ifelse(Single == "left", 1, 2)

if(ini.check_exists(TW, "FontColor", "Target") == 3)
	FT = ini.get(TW, "FontColor", "Target")

if(ini.check_exists(TW, "BackColor", "Target") == 3)
	BT = ini.get(TW, "BackColor", "Target")

if(ini.check_exists(Config, Section) != 2) do
	TT.Insert(Number)
	TT.AddLeft(Number, 0)
	TT.AddMiddle(Number, Panel)
	TT.SetIconVisible(Number, 0)
	TT.SetLeftOnTop(Number, 1)
	TT.SetTextColor(Number, FT)
	TT.SetBackColor(Number, BT)
	TT.SetId(Number, Path)
	quit(1)
endif

Keys = ini.enum_keys(Config, Section)
Number = line(Keys, 0)

if(Number < 4 && ini.check_exists(Config, Section, "activelocked") == 3) do
	Number = TT.Length()
	TT.Insert(Number)
	TT.AddLeft(Number, 0)
	TT.AddMiddle(Number, Panel)
	TT.SetIcon(Number, Icons, ini.get(Config, Section, "activelocked"))
	if(ini.check_exists(Config, Section, "activecaption") == 3)
		TT.SetToolTip(Number, ini.get(Config, Section, "activecaption"))

	TT.SetLeftOnTop(Number, 1)
	TT.SetTextColor(Number, FT)
	TT.SetBackColor(Number, BT)
	TT.SetId(Number, Path)
	quit(1)
endif

for(i = 1; i < Number; i++)
	Temp = i ++ "_path"
	if(ini.check_exists(Config, Section, Temp) != 3) do
		Values = i + 1
		break
	endif
endfor

Number = ini.get(Config, Section, "activetab")
flag clear 1
local Start = TT.Length
local End = Values + Start

for(i = Start; i < End; i++)
	TT.Insert(i)
	TT.AddLeft(i, i - Start)
	TT.AddMiddle(i, Panel)
	if(i - Start == Number) do
		TT.SetId(i, Path)
		flag set 1
		Temp = 0
		if(ini.check_exists(Config, Section, "activelocked") == 3)
			Temp = ini.get(Config, Section, "activelocked")

		TT.SetIcon(i, Icons, Temp)
		TT.SetLeftOnTop(i, 1)
		TT.SetTextColor(i, FT)
		TT.SetBackColor(i, BT)
		if(ini.check_exists(Config, Section, "activecaption") == 3)
			TT.SetTooltip(i, ini.get(Config, Section, "activecaption"), Number)

	else
		Key = i - pproflag(1) - Start
		Temp = Key ++ "_path"
		Temp = ini.get(Config, Section, Temp)
		TT.SetId(i, Temp)
		Temp = Key ++ "_options"
		Temp = ini.get(Config, Section, Temp)
		Tube = word(Temp, 6, "|")
		TT.SetIcon(i, Icons, Tube)
		Temp = Key ++ "_caption"
		if(ini.check_exists(Config, Section, Temp) == 3)
			TT.SetTooltip(i, ini.get(Config, Section, Temp), i - Start)

	endif
endfor
quit(Values)

DebugCL

Имя файла (*.txt) Sub_DebugCL.txt
Автор Вахмурка
Вызываемый плагин -
Версия 1.2
Дата обновления 06.04.2006
local List = arg(1)
local CR = esc(?+\n+, ?+\+)
local Check, Temp, Cap, Mess

if(cl.Exists(List) != 1) do
	messagebox("ok", "Command List '" ++ List ++ "' does not exist", "CL error")
	quit all
endif

local Number = cl.Length(List)

Cap = "Command List '" ++ List ++ "' has " ++ Number ++ " entries"
Mess = "Command List info:" ++ CR

Temp = cl.GetBackColor(List)
if(Temp != "")
	Mess = Mess ++ CR ++ "Background color: " ++ Temp 

Temp = cl.GetBackground(List)
if(Temp != "")
	Mess = Mess ++ CR ++ "Background file: " ++ Temp 

Temp = cl.GetTextColor(List)
if(Temp != "")
	Mess = Mess ++ CR ++ "Text color: " ++ Temp

Mess = Mess ++ CR ++ "Hide interval: " ++ cl.GetHideAfter(List)
Mess = Mess ++ CR ++ "Maximum text length: " ++ cl.GetMaxtext(List)

Temp = cl.GetLastBar()
if(Temp != "") do
	Mess = Mess ++ CR ++ "Name of bar with last button pressed: '" ++ Temp ++ "'"
	Mess = Mess ++ CR ++ "Last pressed button on bar '" ++ Temp ++ "': "
	Mess = Mess ++ cl.GetLastPressed(Temp) ++ CR ++ "Last mouse button on bar '"
	Mess = Mess ++ Temp ++ "': " ++ cl.GetLastMouse (Temp)
endif

if(messagebox("okcancel information", Mess, Cap) == 0)
	quit all

Mess = ""

for(i = 0; i < Number; i = i + 1)
	for(j = 1; 1; j = j + 1)
		Check = Mess
		Cap = "Entry #" ++ i ++ " of " ++ Number - 1

		Temp = cl.GetLeftCmd(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Left Command #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetRightCmd(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Right Command #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetMiddleCmd(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Middle Command #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetLeftParam(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Left Parameter #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetRightParam(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Right Parameter #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetMiddleParam(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Middle Parameter #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetLeftWork(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Left work dir #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetRightWork(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Right work dir #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetMiddleWork(List, i, j)
		if(Temp != "")
			Mess = Mess ++ CR ++ "Middle work dir #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetLeftHow(List, i, j)
		if(Temp != "normal")
			Mess = Mess ++ CR ++ "Left how start #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetRightHow(List, i, j)
		if(Temp != "normal")
			Mess = Mess ++ CR ++ "Right how start #" ++ j ++ ": '" ++ Temp ++ "'"

		Temp = cl.GetMiddleHow(List, i, j)
		if(Temp != "normal")
			Mess = Mess ++ CR ++ "Middle how start #" ++ j ++ ": '" ++ Temp ++ "'"

		if(Check == Mess)
			break

	endfor

	Mess = Mess ++ CR ++ CR ++ "Left ontop checkbox is "
	Mess = Mess ++ ifelse(cl.GetLeftOnTop(List, i), "ON", "OFF")

	Mess = Mess ++ CR ++ "Right ontop checkbox is "
	Mess = Mess ++ ifelse(cl.GetRightOnTop(List, i), "ON", "OFF")

	Mess = Mess ++ CR ++ "Middle ontop checkbox is "
	Mess = Mess ++ ifelse(cl.GetMiddleOnTop(List, i), "ON", "OFF")

	Mess = Mess ++ CR ++ "Left switch to if active checkbox is "
	Mess = Mess ++ ifelse(cl.GetLeftSwitchTo(List, i), "ON", "OFF")

	Mess = Mess ++ CR ++ "Right switch to if active checkbox is "
	Mess = Mess ++ ifelse(cl.GetRightSwitchTo(List, i), "ON", "OFF")

	Mess = Mess ++ CR ++ "Middle switch to if active checkbox is "
	Mess = Mess ++ ifelse(cl.GetMiddleSwitchTo(List, i), "ON", "OFF")

	Temp = cl.GetId(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "ID: '" ++ Temp ++ "'", "")

	Temp = cl.GetLabel(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Label: '" ++ Temp ++ "'", "")

	Temp = cl.GetLabelValue(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Label value: '" ++ Temp ++ "'", "")

	Temp = cl.GetTooltip(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Tooltip: '" ++ Temp ++ "'", "")

	Temp = cl.GetTooltipValue(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Tooltip value: '" ++ Temp ++ "'", "")

	Temp = cl.GetIconFile(List, i)
	if(Temp) do
		Mess = Mess ++ CR ++ "Icon file: '" ++ Temp ++ "'"
		Mess = Mess ++ CR ++ "Icon number: " ++ cl.GetIconNumber(List, i)
	endif

	Mess = Mess ++ CR ++ "Item is "
	Mess = Mess ++ ifelse(cl.IsVisible(List, i), "visible", "NOT visible")

	Mess = Mess ++ CR ++ "Item is "
	Mess = Mess ++ ifelse(cl.IsEnabled(List, i), "enabled", "NOT enabled")

	Mess = Mess ++ CR ++ "Icon is "
	Mess = Mess ++ ifelse(cl.IsIconVisible(List, i), "visible", "NOT visible")

	Mess = Mess ++ CR ++ "Item Width: " ++ cl.GetWidth(List, i)
	Mess = Mess ++ CR ++ "Item Height: " ++ cl.GetHeight(List, i)

	Temp = cl.GetBackColor(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Item Background: '" ++ Temp ++ "'", "")

	Temp = cl.GetTextColor(List, i)
	Mess = Mess ++ ifelse(Temp, CR ++ "Item Text Color: '" ++ Temp ++ "'", "")

	if(messagebox("okcancel information", Mess, Cap) == 0)
		quit all

	Mess = ""
endfor

Комментарии

Скрипт предназначен для отладочной печати списка команд (command list). Вызовите его командой

runfile.Sub_DebugCL("имя_CL")

и извлеките из списка команд всю информацию, которая в нем хранится.


ParsePath

Имя файла (*.txt) Sub_ParsePath.txt
Автор Вахмурка
Вызываемый плагин file
Версия 1.4
Дата обновления 13.07.2009
args FullPath, Depth
local Number, Char, i, Result
local Slash = esc(?+\\+, ?+\+)
local Name = file.nametype(FullPath)

Number = index(FullPath, "/")
if(not Number) do
	Number = index(FullPath, Slash)
	if(not Number)
		quit

	Char = Slash
else
	Char = "/"
endif

local Path = file.folder(FullPath)
Number = word(Path, 0, Slash)
if(arg(0) == 1)
	quit(Number)

if(Number < abs(Depth))
	quit(FullPath)

if(Depth > 0) do
	for(i = Number; i > Number - Depth; i--)
		Result = word(Path, i, Slash) ++ Char ++ Result
	endfor
elseif(Depth == 0) do
	quit(Name)
elseif(Depth < 0) do
	for(i = 1; i <= Number + Depth; i++)
		Result = Result ++ word(Path, i, Slash) ++ Char
	endfor
endif

quit(remove(Result, -1))

Комментарии

Скрипт предназначен для выделения из заданного пути директорий с заданной глубиной. Первый параметр - путь к файлу или директории, причем разделителем может служить как "\" (синтаксис Total Commander), так и "/" (PowerPro). Второй параметр - глубина, считая от имени файла к корню.

Файлу соответствует глубина 0. Если первый параметр оканчивается разделителем, то предполагается, что задано имя директории, в противном случае - файла.

Если второй параметр отрицателен, то отсчет ведется в направлении от корня к имени файла.

Если второй параметр больше действительной глубины (в нашем случае это 5), скрипт возвращает первый параметр. Если второй параметр равен 0, будет возвращено имя файла, если оно задано, и пустую строку в противном случае.

В версии 1.2 введена возможность вычисления действительной глубины пути заданного файла - для этого надо опустить второй параметр.

К примеру, для гипотетического файла c:\One\Two\Three\Four\name.txt скрипт вернет следующие значения:
Первый параметр Второй параметр Возвращаемое значение
"c:\One\Two\Three\Four\" "3" "Two\Three\Four"
"c:\One\Two\Three\Four\name" "2" "Three\Four"
"c:\One\Two\Three\Four\name.txt" "5" "c:\One\Two\Three\Four"
"c:/One/Two/Three/Four/" "4" "One/Two/Three/Four"
"c:/One/Two/Three/Four/name.txt" "-3" "c:/One"
"c:\One\Two\Three\Four\name.txt" "-1" "c:\One\Two\Three"
"c:/One/Two/Three/Four/name.txt" 5


TreeDownCmd

Имя файла Sub_TreeDownCmd.txt
Автор Вахмурка
Вызываемые плагины file, miscplugin
Версия 1.0
Дата обновления 24.06.2006
args Path, Name
local Report = miscplugin.tempfilename()
local Str = "/c dir " ++ Path ++ " /a:d /b > " ++ Report
local ExitCode = file.runwait(0, "cmd", Str, "", "hide")

if(not file.size(Report))
	quit("")

local Hand = file.open(Report, "r")
local Temp = "z;"
flag clear 2

if(Hand > 0 && not ExitCode) do
	for(not(file.eof(Hand))) 
		Str = file.readstring(Hand)
		Str = file.nametype(file.getshortpath(Path ++ "\" ++ Str))
		if(Str) do
			if(stricoll(Str, Name) == 1) do
				flag set 2
				if(stricoll(Temp, Str) == 1 || Temp == "z;")
					Temp = Str

			endif
		endif
	endfor
else
	messagebox("ok error", "File not opened", "FILE plugin error")
	quit all
endif

file.close(Hand)

if(pproflag(2)) do
	quit(Path ++ "\" ++ Temp)
else
	quit("")
endif

TreeUpCmd

Имя файла (*.txt) Sub_TreeUpCmd.txt
Автор Вахмурка
Вызываемые плагины file, miscplugin
Версия 1.0
Дата обновления 24.06.2006
args Path, Name
local Report = miscplugin.tempfilename()
local Str = "/c dir " ++ Path ++ " /a:d /b > " ++ Report
local ExitCode = file.runwait(0, "cmd", Str, "", "hide")

if(file.size(Report) - 2 == length(Name))
	quit("")

local Temp
local Hand = file.open(Report, "r")
flag clear 2

if(Hand > 0 && not ExitCode) do
	for(not(file.eof(Hand))) 
		Str = file.readstring(Hand)
		if(Str) do
			Str = file.nametype(file.getshortpath(Path ++ "\" ++ Str))
			if(stricoll(Str, Name) == -1) do
				flag set 2
				if(stricoll(Temp, Str) == -1)	
					Temp = Str

			endif
		endif
	endfor
else
	messagebox("ok error", "File not opened", "FILE plugin error")
	quit all
endif

file.close(Hand)

if(pproflag(2)) do
	quit(Temp)		
else
	quit("")		
endif

LowestDirCmd

Имя файла (*.txt) Sub_LowestDirCmd.txt
Автор Вахмурка
Вызываемые плагины file, miscplugin
Версия 1.0
Дата обновления 24.06.2006
args Path
local Report = miscplugin.tempfilename()
local Str = "/c dir " ++ Path ++ " /a:d /b > " ++ Report
local ExitCode = file.runwait(0, "cmd", Str, "", "hide")

if(not file.size(Report))
	quit("")

flag clear 2
local Hand = file.open(Report, "r")
local Temp

if(Hand > 0 && not ExitCode) do
	for(not(file.eof(Hand))) 
		Str = file.readstring(Hand)
		if(Str) do
			Str = file.nametype(file.getshortpath(Path ++ "\" ++ Str))
			if(stricoll(Temp, Str) == -1)
				Temp = Str

		endif
	endfor
else
	messagebox("ok error", "File not opened", "FILE plugin error")
	quit all
endif

file.close(Hand)
quit(Path ++ "\" ++ Temp)

MoveFile

Имя файла (*.txt) Sub_MoveFile.txt
Автор Вахмурка
Вызываемые плагины file
Версия 1.0
Дата обновления 27.01.2006
local Name = file.nametype(arg(1))
local New = arg(2) ++ Name
file.move(arg(1), New)

Descript_ion

Имя файла Sub_Descript_ion.txt
Автор Вахмурка
Вызываемые плагины ini, file, map
Версия 1.0
Дата обновления 27.08.2007
args Path, FileName, Comment, Action

local Source = Path ++ "descript.ion"
local CR = esc(?+\n+, ?+\+)
local Quote = esc(?+\"+, ?+\+)
local AsQuote = "|"
local Config = pprofolder ++ "scripts\ini\Descript_ion.ini"
local fh, Str, SomeFile, Temp, NotComms, Delim

if(ini.check_exists(Config, "Options", "Delimiter") == 3)
	Delim = ini.get(Config, "Options", "Delimiter")

if(index(FileName, " "))
	FileName = AsQuote ++ FileName ++ AsQuote

if(not file.validpath(Source)) do
	if(index("drg", Action))
		quit("ERROR: no comment file")

	fh = file.open(Source, "w")
	if(fh <= 0) do
		messagebox("ok error", "File not opened", "FILE plugin error #12")
		quit all
	endif

	file.writeline(fh, replacechars(FileName, AsQuote, Quote) ++ " " ++ Comment)
	file.close(fh)
	quit
else
	fh = file.open(Source, "r")
	if(fh <= 0) do
		messagebox("ok error", "File not opened", "FILE plugin error #11")
		quit
	endif
endif

local M = map.create(10, 1)
flag set 1

for(not(file.eof(fh))) 
	Str = file.readstring(fh)
	if(not Str)
		continue

	SomeName = word(Str, 1)
	if(file.validpath(Path ++ SomeName)) do
		Temp = select(Str, length(SomeName) - length(Str) + 1)
	else
		SomeName = word(Str, 1, Quote)
		if(not file.validpath(Path ++ SomeName)) do
			NotComms = NotComms ++ Str ++ CR
			continue
		else
			SomeName = AsQuote ++ SomeName ++ AsQuote
			Temp = select(Str, length(SomeName) - length(Str) + 1)
		endif
	endif

	if(SomeName == FileName) do
		if(Action == "g") do
			map.destroy(M)
			file.close(fh)
			quit(Temp)
		elseif(Action == "r") do
			M[FileName] = Comment
			flag clear 1
		elseif(Action == "b") do
			M[FileName] = Comment ++ Delim ++ Temp
			flag clear 1
		elseif(Action == "a") do
			M[FileName] = Temp ++ Delim ++ Comment
			flag clear 1
		endif
	else
		M[SomeName] = Temp
	endif
endfor

if(index("s", Action))
	M[FileName] = Comment

if(index("bar", Action) && pproflag(1))
	M[FileName] = Comment

file.close(fh)
file.delete(Source)

fh = file.open(Source, "w")
if(fh <= 0) do
	messagebox("ok error", "File not opened", "FILE plugin error #13")
	quit all
endif

if(NotComms)
	file.writeline(fh, NotComms ++ CR)

map.restart(M)

for(not(map.eof(M)))
	Str = map.getnext(M)

	if(not Str)
		continue

	file.writeline(fh, replacechars(Str, AsQuote, Quote) ++ " " ++ M[Str])
endfor

file.close(fh)
map.destroy(M)

Комментарии

В скрипт передаются следующие аргументы:

В двух последних случаях скрипт пытается прочесть значение ключа Delimiter раздела Options файла scripts\ini\Descript_ion.ini. Например, если PowerPro установлена, как у меня, в d:\Utils\PowerPro, то файл настроек имеет путь d:\Utils\PowerPro\scripts\ini\Descript_ion.ini.

Если ключ существует, его значение будет использовано в качестве разделителя между старым и новым комментариями. По умолчанию значение разделителя - точка.


TMTC

Имя файла Sub_TMTC.txt
Автор Вахмурка
Вызываемые плагины tc, win, childwin
Версия 1.0
Дата обновления 08.06.2009
args hwnd, Panel
if(not Panel) do
	Panel = tc.active(hwnd)
elseif(Panel == 1)
	Panel = "left"
elseif(Panel == 2)
	Panel = "right"
endif

local List = win.childhandlelist(hwnd, "c=TMyPanel")
local TMTC = win.childhandlelist(hwnd, "c=TMyTabControl")
local Num = word(TMTC, 0)
local TMP

if(Num == 0) do
	quit(0)
elseif(Num == 1) do
	local TPP = win.childhandlelist(hwnd, "c=TPathPanel")
	local LPath = win.gettext(word(TPP, 1))
	local RPath = win.gettext(word(TPP, 2))

	for each word Hand in List
		Num = childwin.handle(Hand, "TPathPanel")
		if(Num) do
			Num = win.gettext(Num)
			if(Num == LPath && Panel == "right") do
				TMP = Hand
				break
			endif
			if(Num == RPath && Panel == "left") do
				TMP = Hand
				break
			endif
		endif
	endfor

	if(not TMP)
		quit(0)

	for each word Hand in List
		Num = childwin.handle(Hand, "TMyComboBox")
		if(Num) do
			if(childwin.gettext(Num) && Hand != TMP) do
					TMP = Hand
					break
			endif
		endif
	endfor
else
	for each word Hand in List
		Num = childwin.handle(Hand, "TMyTabControl")
		if(Num) do
			TMP = Hand
			if(Panel == "left")
				break

		endif
	endfor
endif

TMTC = childwin.handle(TMP, "TMyTabControl")
if(not TMTC)
	quit(0)

quit(TMTC)

Комментарии

Внимание! Скрипт не работает в Total Commander 7.5 pb1 и pb2!


Progress

Имя файла Sub_Progress.txt
Автор Вахмурка
Вызываемые плагины -
Версия 1.0
Дата обновления 23.06.2017
args Val, Start, End, Width, AutoClose, Display, Props

static D = Display
static P = "%"

if(!Display)
	D = P

static AC = AutoClose

if(!End)
	End = 100

static E = End

if(!Width)
	Width = 200

static C = cl.Create("Progress", 1)
C.Insert(0)
C.SetLabel(0, "*control progress " ++ Val ++ " " ++ Start ++ " " ++ End)
C.SetProperties("Format=barsize tooltips flat position: middlecaption")

if(Props)
	C.AddProperties(Props)

C.SetWidth(0, Width)
C.Insert(0)
C.AddLeft(0, "*bar close Progress")
C.SetWidth(0, 60)
C.SetToolTip(0, "Left: Close/_____________/Start: " ++ Start ++ "/End: " ++ End)
C.show

@Current
args Val

local Temp = Val

switch (D)
	case P
		Temp ++= D
		break
	case "/"
		Temp ++= D ++ E
endswitch

C.SetLabel(0, Temp)
C.SetCtrlValue(1, Val)

if(Val >= E && AC) do
	wait.forinterval(AC)
	C.close
endif

Комментарии

Скрипт носит информативно-иллюстративную функцию, позволяя следить за ходом выполнения длительных операций. В средней части заголовка окна изображается небольшая панель, содержащая два элемента. Правый – так называемый прогресс-бар, показывающий выполнение операции в наглядном графическом виде. Левый предоставляет ту же информацию в числовом виде (счетчик) и позволяет закрыть панель, если это необходимо.

Скрипт вызывается минимум дважды. Первый раз – до начала операции, для отображения панели. Последующие – для обновления информации.

Для первого вызова в скрипт передаются следующие параметры:
Val – текущее значение счетчика;
Start – начальное значение счетчика (при первом запуске обычно Val = Start);
End – конечное значение счетчика (по умолчанию 100);
Width – ширина панели (по умолчанию 200);
AutoClose – время в миллисекундах, по истечении которого панель закрывается после завершения операции. Если AutoClose = 0, то панель можно закрыть только нажатием на левую кнопку панели;
Display – формат счетчика. Возможные значения:

Props – строка свойств согласно документации к PowerPro. Можно задать цвет текста, фон, высоту панели и т. д.

Второй и последующие вызовы скрипта требуют одного параметра – текущего значения счетчика.

Например, обрабатываются 123 файла. До начала обработки вызывается скрипт с параметрами
.Subs\Sub_Progress(0, 0, 123, 300, 5000, "/", "roundbar: 7")
Панель будет иметь ширину 300 пикселей и сильно закругленные углы. На кнопке отобразится информация "0/123".
Далее, при обработке файла номер i вызов осуществляется командой
.Subs\Sub_Progress@Current(i)
Например, если i = 61, то на кнопке появится надпись "61/123" и полоска будет залита примерно до середины.

После того, как будет обработан 123-й файл, пройдет 5 секунд и панель исчезнет.


На главную Все о Total Commander PowerPro PowerPro & Total Commander