====== О плагине ====== Плагин 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, а в диалоге фильтра существует.