TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Попробовал сделать команду:

Код: Выделить всё

temd=tem(#1) delay(0)
С ней как будто выполняется всё нормально, только замена функции на команду не очень удобна в применении.
Кстати, с функцией tcm у меня вопросов не возникало пока.

Add
Всё-таки иногда проскакивают ошибки на тестовом примере при 0, 1 или 2. Изменил на delay(5).
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Опиши макрос с таким именем, его можно использовать в выражении вида:

Код: Выделить всё

eval(tcmd(4001)+tcmd(540)+temd(321)+tcmd(4002))
По-моему, вполне компактная запись.
А при вызове с командной строки просто указываешь /ei вместо /ef.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):П.ч. TCFS2Tools не умеет определять положение разделителя при горизонтальном расположении панелей
С позицией сепаратора при вертикальном расположении панелей сложность - эта позиция зависит от набора включенных элементов интерфейса... В принципе, у тотала файловые панели имеют отдельные классы, но панель кнопок дисков лежит вне, а когда их две, то обе лежат вне.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Не понял. Вне чего они лежат? У тебя есть TMyListBox с координатами, относительно их и надо ставить сепаратор.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

При разных наборах элементов интерфейса и неизменной высоте окна тотал использует разные числа в формуле подсчета положения сепаратора.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А ты эту формулу можешь привести?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Для горизонтального расположения панелей она проста:

Код: Выделить всё

int xpos=MulDiv(tcwidth, pos, 100)-2;
Где tcwidth - ширина клиентской части окна.

Для вертикального всё сложнее, первый параметр функции MulDiv при одной и той же высоте окна может быть разным, если включены/выключены те или иные элементы интерфейса. При всех выключенных элементах, похоже, это просто высота клиентской части окна без высоты сепаратора. Попробую поиграть с позициями панелей, посмотрю, что получится.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А msg($433, 65550, 7) не подойдёт для этого?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А откуда системная функция GetWindowMetrics знает, включены ли в тотале панель инструментов, панель дисков, командная строка? А искать все эти панели на окне - плохой вариант (в 64-битном тотале всё ещё хуже - все они имеют одинаковый класс Window).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Клиентская область - это вроде как вся область без заголовка и меню, так? Зачем функции знать о других каких-то компонентах?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):Клиентская область - это вроде как вся область без заголовка и меню, так?
Это правильно. Но все дочерние окна (включая и те, наличие/отсутствие которых изменяет переменную в формуле) лежат внутри этой клиентской области. А эта функция возвращает системные параметры, которые, как правило, к клиентской области никакого отношения не имеют (разве что к разнице между клиентской и общей областей, но эта разница нам тут не нужна).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):А эта функция возвращает системные параметры, которые, как правило, к клиентской области никакого отношения не имеют
То, что я привёл - это высота клиентской части окна. Взято из твоего TFS2.ini, да я и сам раньше проверял на MSDN и применяю значение этой высоты в своих командах.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Фу ты, я посмотрел на tt_GetWindowMetrics и подумал, что это сообщение, которое работает с функцией GetSystemMetrics. Но в любом случае высоту клиентской части окна я и так элементарно получаю, вызывая функцию GetClientRect (к слову, msg($433, 65550, 7) делает то же самое). Позиции дочерних окон тоже могу найти. Самая большая проблема в том, что надо в точности разобраться, как тотал получает те числа, которые передает в формулу - при включенных элементах интерфейса они не совпадают с выстотой окна за вычетом высоты сепаратора.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):они не совпадают с выстотой окна за вычетом высоты сепаратора
А на много не совпадают?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

На моей классической теме оформления при включении всех тулбаров получается на 136 точек меньше. Т.е. формула следующая:

Код: Выделить всё

int ypos=MulDiv(tcheight-splitter_height-x, pos, 100)-3;
Где x равен 0, если выключить всё, что можно, и 136, если включить всё, что можно.
Последний раз редактировалось MVV Вт мар 06, 2012 16:05, всего редактировалось 2 раза.
Ответить