Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Переключение между разными базами эскизов
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Mar 26, 2013 20:38    Post subject: Reply with quote

Avada wrote:
Всё предыдущее обсуждалось до создания темы в личке.
Запрос-то изначально не в личке был. Wink
Avada wrote:
Нет. Запись идёт в явном виде.
В смысле? Открывается диалог, правится путь и подтверждается, тем самым запись в ini меняется.
Avada wrote:
Что и требуется. То есть задача в принципе решаема.
Да, и именно так она решена в моём скрипте.
Avada wrote:
Осталось понять, каким образом её корректно вставить на уровне скрипта, чтобы в кнопке не указывать.
В моём скрипте разве для кнопки что-то нужно указывать?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10257
Location: Россия, Саратов

Post (Separately) Posted: Tue Mar 26, 2013 21:18    Post subject: Reply with quote

Flasher
Кажется, всё заработало так, как следует. Спасибо, буду ещё смотреть. При наличии проблем сообщу.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
SilverVox



Joined: 13 Jun 2009
Posts: 25
Location: Русь

Post (Separately) Posted: Tue Sep 23, 2014 01:53    Post subject: Reply with quote

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


Code:

'==========================================================
'VBS
'Имя Файла: ChangeSizeThumbnails.vbs
'Автор:     SilverVox
'Версия:    1.1
'Дата:      17.09.2014
'
'Производит изменение размеров эскизов для TotalCommander.
'Размер передается в параметрах командной строки.
'Для работы нужен WSH Helper for TC by Volniy
'
'Параметры вызова:
'   {Ширина} {Высота}
'==========================================================


Option Explicit
Dim TCS, Width, Height, MaxValue, ThumbsLocation
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.Pause = 100
TCS.Wait = True
TCS.LockTC True

MaxValue = 560      'Максимально допустимое значение размеров (Можно изменять на свое усмотрение)

If not TCS.IsRunningTC Then
        MsgBox "Процесс TotalCmd.exe не найден.", vbCritical + vbOKOnly, "Ошибка!"
        Quit(1)
End If

If WScript.Arguments.Count < 2 Then
        MsgBox "Неверное количество параметров.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
        Quit(2)
End If

Width =  CorrectedValue(WScript.Arguments(0))
Height = CorrectedValue(WScript.Arguments(1))

TCS.GetINIFiles
ThumbsLocation = TCS.INIRead(TCS.MainINI, "Configuration", "ThumbsLocation")

If ThumbsLocation = "" Then
    TCS.SendCommand 482
    TCS.SendKeystroke "{TAB 8}" & Width & "{TAB}" & Height & "{ENTER}"
Else
    If Right(ThumbsLocation, 1) = "\" Then ThumbsLocation = Mid(ThumbsLocation, 1, Eval(Len(ThumbsLocation)-1))
    With CreateObject("Scripting.FileSystemObject")
        If SplitChkValue(.GetFileName(ThumbsLocation)) Then
            ThumbsLocation = .GetParentFolderName(ThumbsLocation)
        End if
    End With
    If Right(ThumbsLocation, 1) <> "\" Then ThumbsLocation = ThumbsLocation & "\"
    ThumbsLocation = ThumbsLocation & Width & "X" & Height
    ThumbsLocation = Replace(ThumbsLocation, "%", "{%}")
    TCS.SendCommand 482
    TCS.SendKeystroke "{TAB}{BS}" & ThumbsLocation & "{TAB 7}" & Width & "{TAB}" & Height & "{ENTER}"
End If

Quit(0)



'===== СубПроцедуры =============================================================

Function SplitChkValue(Value)
        Dim SbStr, Num
        SplitChkValue = True
        Num = 0
        For Each SbStr In Split(Value, "X")
            Num = Eval(Num+1)
            If Not ChkValue(SbStr) Then SplitChkValue = False
        Next
        If Num <> 2 Then SplitChkValue = False
End Function

Function ChkValue(Value)
    Dim N
    ChkValue = False
    If IsNumeric(Value) Then
        If Trim(Value) = Value Then
            Value = CCur(Value)
            For N = 1 To Eval(MaxValue/8)
                If Value = Eval(N*8) Then
                    ChkValue = True
                End If
            Next
        End If
    End If
End Function

Function CorrectedValue(Value)
    Dim N, PrvN
    If IsNumeric(Value) Then
        Value = Int(Value)
        If Value < 8 Then
            MsgBox "Значения параметров выходят за границы допустимой области.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
            Quit(3)
        End If
        If Value > MaxValue Then
            MsgBox "Значения параметров выходят за границы допустимой области.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
            Quit(4)
        End If
        PrvN = 0
        For N = 1 To Eval(MaxValue/8)
            If Value < Eval(N*8) Then
                If Value > Eval(PrvN*8) Then
                    If Eval(N - PrvN) < 4 Then Value = Eval(PrvN*8)
                    If Eval(N - PrvN) > 4 Then Value = Eval(N*8)
                End If
            End If
            PrvN = N
        Next
    Else
        MsgBox "Нечисловые значения в параметрах.", vbCritical + vbOKOnly, "Ошибка параметров командной строки!"
        Quit(5)
    End If
    CorrectedValue = Value
End Function


Sub Quit(Errorlevel)
  Set TCS  = Nothing
  WScript.Quit Errorlevel
End Sub



Использование:
ChangeSizeThumbnails.vbs {Ширина} {Высота}

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


Пример кнопки:
Code:

TOTALCMD#BAR#DATA
ChangeSizeThumbnails.vbs
128 128
WCMICONS.dll,26
128x128
%commander_path%\System\
0
-1

_________________
Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Sep 23, 2014 16:34    Post subject: Reply with quote

SilverVox
Художник что рисует - дождь? Wink
Нехилый такой художник, если первый "блин" в таком ракурсе рождается - с использованием функций и т. п.
Тут особо критиковать нет смысла. Просто если человек предпочитает быструю работу, то он не будет запариваться по куче отладочных проверок, ему достаточно соблюдать правила введения данных. Иные могут делать по своему и навешивать на скрипт сколько угодно условий. Я лично в таких простых и требующих резкости задачах стараюсь этого избегать. Да и реверсное переключение, предложенное мной, куда приятнее в плане оптимальности.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
SilverVox



Joined: 13 Jun 2009
Posts: 25
Location: Русь

Post (Separately) Posted: Wed Sep 24, 2014 02:09    Post subject: Reply with quote

Рисую иллюстрации для детских книг, ну и официальная моя профессия, специалист ДПИ в области художественных изделий из дерева метала и керамики.

Ну а насчет первого блина, то это относительно VBS, я работал когда-то с MSDOS и научился писать батники аналогичной сложности. Но командная строка далеко не все умеет, и со временем для решения некоторых задач захотелось чего-то посерьезней. Вот попробовал разобратся в VBS, так как на моем компе было несколько примеров скриптов, и на тот момент не было доступа в нет, то все познания получил из них. Теперь буду искать какую то литературу по синтаксису, может что-то из этого получится.
На самом деле я простой пользователь, который постоянно недоволен теми или иными недостатками и неудобствами, просто хочется сделать свою рабочую среду удобной и стабильной, так как я рисую в основном на компе.

Ну а проверки я "навесил" только, как мне показалось, самые необходимые, я люблю хоть минимум, но надежности.
В ходе экспериментов выяснилось, что в размерах эскизов могут быть только значения из ряда полученного в результате умножения 8 на ряд простых чисел, а если задать несоответствующий размер то командер его скорректирует до ближайшего значения. А так как идея моего подхода заключалась в возможности передать любой размер, и создавать для каждого значения свой каталог для кэша с именем соответствующим размеру, то просто пришлось проверять входящие значения и корректировать их в соответствии. Ну и посчитал нужным продумать возможность корректной работы в условиях без кэширования. Остальное возможно было и лишним, в умелых руках все и так работает как надо, а скорость работы, экономия оперативной памяти (и своего времени), часто бывают очень важным фактором. Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями.

Насчет реверсного переключения согласен, это действительно очень удобно, я на момент решения проблемы почему-то и не подумал о такой возможности.

Спасибо за поддержку добрым словом.
_________________
Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Sep 24, 2014 15:40    Post subject: Reply with quote

SilverVox wrote:
Но как по мне, когда делаешь для себя, то хочется один раз сделать так, чтобы использование было менее обусловленным, тем более если хочется поделится своим творением с друзьями.
ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит.
SilverVox wrote:
Насчет реверсного переключения согласен, это действительно очень удобно
Конечно. Как правило двух режимов более чем достаточно. Кстати, можно в таком ключе ещё обычную кнопку с TCFS2 сварганить. Могу позже сделать.
 Hidden text

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
SilverVox



Joined: 13 Jun 2009
Posts: 25
Location: Русь

Post (Separately) Posted: Thu Sep 25, 2014 00:57    Post subject: Reply with quote

Quote:
ИМХО, если человек заморочился по данной теме, то вводить заведомо правильные величины для него труда не составит.

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

А с TCFS2 я еще пока не сталкивался, было бы интересно.

Буду безмерно благодарен, если поможете с инфой.
_________________
Если струну не дотянуть – она не будет звучать.
Если перетянуть – она лопнет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Dec 22, 2014 17:41    Post subject: Reply with quote

SilverVox wrote:
А с TCFS2 я еще пока не сталкивался, было бы интересно.
Забыл выложить в своё время аналог данного решения:
Quote:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\
Utils\TCFS2\TCFS2.exe
/ef "msg($0B, 0) tcm(482,1) if(tcini(Configuration, ThumbHeightNoCache,
80), eval(send_wait(`{TAB}{END}{BS}2{TAB 7}120{TAB}120{ENTER}`, findwnd(`TDLGCONFIGALL`)))+set_tcini(Configuration, ThumbHeightNoCache, 120), eval(send_wait(`{TAB}{END}{BS}1{TAB 7}80{TAB}80{ENTER}`, findwnd(`TDLGCONFIGALL`)))+set_tcini(Configuration, ThumbHeightNoCache, 80)) delay(20) tcm(330) msg($0B, 1) tcm(330)"
wcmicons.dll,26
Эскизы:
80/120 пикселей

Avada, можешь проверить.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Jan 03, 2015 06:33; edited 2 times in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10257
Location: Россия, Саратов

Post (Separately) Posted: Mon Dec 22, 2014 21:16    Post subject: Reply with quote

Flasher
Да, работает (числа изменил на свои, кнопку создал не напрямую, а для юзер-команды). По сравнению с предыдущим решением почти совсем не вылезает диалог настроек. Спасибо, беру.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Dec 22, 2014 21:31    Post subject: Reply with quote

Avada
Ну, да. И никакого Хелпера. Wink
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Tue Dec 23, 2014 11:28    Post subject: Reply with quote

Avada wrote:
По сравнению с предыдущим решением почти совсем не вылезает диалог настроек.
Предыдущее решение можно ускорить, если перед If задать стандартную задержку для операций не 70 миллисекунд (по умолчанию), а ноль
Code:
.Pause = 0

А чтобы не передёргивался экран можно добавить в начале записи (после строки With)
Code:
.LockTC True
а в конце (перед строкой End With)
Code:
.LockTC False
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Dec 23, 2014 13:16    Post subject: Reply with quote

sa wrote:
А чтобы не передёргивался экран
Эта блокировка не влияет на появление окон, экран не передёргивается, тут иной эффект, поэтому смысла ставить её нет никакого.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Tue Dec 23, 2014 13:49    Post subject: Reply with quote

Flasher wrote:
смысла ставить её нет никакого

Каждый может попробовать вариант с блокировкой и без неё и решить, есть ли в ней смысл или нет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Dec 23, 2014 13:53    Post subject: Reply with quote

Я бы сформулировал иначе.
Каждый может попробовать в данном скрипте добавить блокировку и убедиться, что смысл в её применении отсутствует.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Tue Dec 23, 2014 17:16    Post subject: Reply with quote

Разницу в поведении можно увидеть (или не увидеть) на примере скрипта, который просто вызывает диалог настройки и тут же закрывает его, ничего не изменяя при этом.
Без блокировки:
Code:
With CreateObject("TCScript.Helper")
  .SendCommand 490
  .SendKeystroke "{ENTER}"
End With
С блокировкой:
Code:
With CreateObject("TCScript.Helper")
  .LockTC True
  .SendCommand 490
  .SendKeystroke "{ENTER}"
  .LockTC False
End With
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group