Страница 50 из 130
Добавлено: Чт янв 26, 2012 15:41
sa
Попробовал сделать команду:
С ней как будто выполняется всё нормально, только замена функции на команду не очень удобна в применении.
Кстати, с функцией
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
Для горизонтального расположения панелей она проста:
Где
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, если включить всё, что можно.