====== О плагине ======
Плагин ModifyDialogs предназначен для небольших косметических изменений вида диалогов Total Commander.
В первых версиях плагин (под названием MoveButton) работал только с окном копирования/перемещения. В настоящее время можно отслеживать и обрабатывать до 32 диалогов, каждый из которых может содержать до 16 различных классов элементов управления и до 32 элементов управления для каждого класса.
Для диалогов можно производить следующие действия: перемещение и изменение размеров самого диалога, перемещение и изменение размеров элементов управления диалога, центрирование диалогов относительно главного или родительского окна, сохранение и загрузку позиций и размеров окна.
Обратите внимание, что плагин может работать не во всех диалогах (например, не работает в диалоге поиска файлов).
===== Базовые понятия =====
Плагин может работать в двух режимах --- простом и расширенном. В простом режиме выполняется корректировка только двух диалогов --- копирования и перемещения. Для использования простого режима достаточно вызвать одну команду [[movebutton_func]], опционально --- с параметром.
При работе в расширенном режиме можно задать произвольный диалог из имеющихся в составе Total Commander. Для задания обработки диалога необходимо сначала вызвать команду [[movebutton_adddialog]], а затем одну или несколько команд [[movebutton_addcontrol]] --- для добавления элементов управления. Для добавления следующего диалога нужно вызвать [[movebutton_adddialog]] с параметрами следующего диалога и добавить для него элементы управления.
Если нужно только производить действия над диалогом (сохранение положения или центрирование), то элементы управления можно не добавлять.
После окончания добавления диалогов нужно вызвать команду [[movebutton_func]] без параметров.
Поскольку в 32-битной и 64-битной версиях Total Commander используются разные классы элементов управления, для поддержки обеих версий необходимо в конфигурации Autorun сделать два набора и загружать нужный в зависимости от версии программы.
Для определения классов, экземпляров элементов управления и видимого текста для фильтра удобно использовать программу **Au3Info** из дистрибутива [[https://www.autoitscript.com/site/autoit/downloads/|Autoit3]]. Для просмотра структуры диалога и базовых тестов над его элементами управления можно использовать **InqSoft Window Scanner**. Разумеется, это только для примера, вы можете использовать свои любимые инструменты.
Некоторые примеры использования плагина в расширенном режиме можно посмотреть на [[movebutton_examples|странице примеров]].
===== Фильтрация по условию =====
Для того, чтобы плагин мог работать с различными диалогами, имеющими один класс, есть возможность добавить дополнительные условия с помощью команды [[movebutton_addcondition]]. К сожалению, не всегда есть возможность с достоверностью установить различия программно, такие диалоги будут обрабатываться как один и тот же диалог.
При использовании нескольких диалогов с одним классом, к которым применены условия, нужно помнить, что если для какого-то диалога не удалось найти условие, его нужно ставить после диалогов, для которых есть условия. Тогда если ни одно из условий в предыдущих диалогах не сработает, будет использоваться диалог без условия.
Условия для разных диалогов следует подбирать таким образом, чтобы они в максимальной степени отличали диалог от других. Неоднозначность возникает тогда, когда условие, заданное для одного диалога, может выполняться для другого, который стоит выше.
Пример неоднозначности в использовании условий:
# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3
В этом коде второй диалог будет всегда определяться как диалог фильтра, поскольку тоже имеет заголовок "Total Commander". Чтобы исключить неоднозначность, нужно добавить условие существования кнопки в первый диалог либо поменять диалоги местами.
# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
AddCondition /EXISTS:1 "TButton" 3
# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3
Теперь диалог фильтра будет найден только в случае, если в дополнение к заголовку "Total Commander" существует кнопка TButton3. Соответственно, второй диалог будет тоже найден, поскольку в нем кнопка TButton3 не существует. Условие поиска по заголовку в данном случае не играет роли, но может понадобиться в случае добавления третьего диалога с классом TCOMBOINPUT.
# Диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3
# Диалог "Фильтр...":
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
В этом варианте диалог создания каталога будет найден, поскольку в нем не существует кнопка TButton3, а в диалоге фильтра существует.