Страница 50 из 130

Добавлено: Чт янв 26, 2012 15:41
sa
Попробовал сделать команду:

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

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

Add
Всё-таки иногда проскакивают ошибки на тестовом примере при 0, 1 или 2. Изменил на delay(5).

Добавлено: Чт янв 26, 2012 17:15
MVV
Опиши макрос с таким именем, его можно использовать в выражении вида:

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

eval(tcmd(4001)+tcmd(540)+temd(321)+tcmd(4002))
По-моему, вполне компактная запись.
А при вызове с командной строки просто указываешь /ei вместо /ef.

Добавлено: Вт мар 06, 2012 11:41
MVV
Flasher писал(а):П.ч. TCFS2Tools не умеет определять положение разделителя при горизонтальном расположении панелей
С позицией сепаратора при вертикальном расположении панелей сложность - эта позиция зависит от набора включенных элементов интерфейса... В принципе, у тотала файловые панели имеют отдельные классы, но панель кнопок дисков лежит вне, а когда их две, то обе лежат вне.

Добавлено: Вт мар 06, 2012 12:21
Flasher
MVV
Не понял. Вне чего они лежат? У тебя есть TMyListBox с координатами, относительно их и надо ставить сепаратор.

Добавлено: Вт мар 06, 2012 12:24
MVV
При разных наборах элементов интерфейса и неизменной высоте окна тотал использует разные числа в формуле подсчета положения сепаратора.

Добавлено: Вт мар 06, 2012 12:26
Flasher
А ты эту формулу можешь привести?

Добавлено: Вт мар 06, 2012 12:32
MVV
Для горизонтального расположения панелей она проста:

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

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

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

Добавлено: Вт мар 06, 2012 12:38
Flasher
А msg($433, 65550, 7) не подойдёт для этого?

Добавлено: Вт мар 06, 2012 12:47
MVV
А откуда системная функция GetWindowMetrics знает, включены ли в тотале панель инструментов, панель дисков, командная строка? А искать все эти панели на окне - плохой вариант (в 64-битном тотале всё ещё хуже - все они имеют одинаковый класс Window).

Добавлено: Вт мар 06, 2012 13:16
Flasher
Клиентская область - это вроде как вся область без заголовка и меню, так? Зачем функции знать о других каких-то компонентах?

Добавлено: Вт мар 06, 2012 13:26
MVV
Flasher писал(а):Клиентская область - это вроде как вся область без заголовка и меню, так?
Это правильно. Но все дочерние окна (включая и те, наличие/отсутствие которых изменяет переменную в формуле) лежат внутри этой клиентской области. А эта функция возвращает системные параметры, которые, как правило, к клиентской области никакого отношения не имеют (разве что к разнице между клиентской и общей областей, но эта разница нам тут не нужна).

Добавлено: Вт мар 06, 2012 13:32
Flasher
MVV писал(а):А эта функция возвращает системные параметры, которые, как правило, к клиентской области никакого отношения не имеют
То, что я привёл - это высота клиентской части окна. Взято из твоего TFS2.ini, да я и сам раньше проверял на MSDN и применяю значение этой высоты в своих командах.

Добавлено: Вт мар 06, 2012 13:43
MVV
Фу ты, я посмотрел на tt_GetWindowMetrics и подумал, что это сообщение, которое работает с функцией GetSystemMetrics. Но в любом случае высоту клиентской части окна я и так элементарно получаю, вызывая функцию GetClientRect (к слову, msg($433, 65550, 7) делает то же самое). Позиции дочерних окон тоже могу найти. Самая большая проблема в том, что надо в точности разобраться, как тотал получает те числа, которые передает в формулу - при включенных элементах интерфейса они не совпадают с выстотой окна за вычетом высоты сепаратора.

Добавлено: Вт мар 06, 2012 14:46
Flasher
MVV писал(а):они не совпадают с выстотой окна за вычетом высоты сепаратора
А на много не совпадают?

Добавлено: Вт мар 06, 2012 15:50
MVV
На моей классической теме оформления при включении всех тулбаров получается на 136 точек меньше. Т.е. формула следующая:

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

int ypos=MulDiv(tcheight-splitter_height-x, pos, 100)-3;
Где x равен 0, если выключить всё, что можно, и 136, если включить всё, что можно.