Страница 52 из 130
Добавлено: Ср мар 07, 2012 14:49
MVV
На моей винде параметры следующие:
Код: Выделить всё
Размер окна: 800x600.
Размер клиентской части окна: 792x554.
Тотал запущен с чистым конфигом. Тулбар в одну строку (аж 3 кнопки).
Код: Выделить всё
Включены все галки в настройках Layout.
Первый параметр MulDiv: 416.
Код: Выделить всё
То же самое, но без галки "показывать две панели букв дисков".
Первый параметр MulDiv: 444.
Код: Выделить всё
То же самое, но без панелей букв дисков.
Первый параметр MulDiv: 472.
Добавлено: Вс мар 11, 2012 10:34
MVV
Ну в общем-то получить эти числа ручками несложно. Надо найти в окне тотала 2 панели с классом TMyPanel, они расположены за окнами с файлами (собственно, вопрос, что называть файловыми панелями - эти панели или сами списки, которые имеют класс TMyListBox). Кроме того, поверх них лежат все заголовки табуляторов, кнопочки быстрого доступа и т.п. (странно, что списки файлов тупо лежат поверх этих панелей, а не являются дочерними окнами).
В общем, находим расстояние от верха верхней TMyPanel до низа нижней, оно совпадает с тем магическим числом. Проблема в том, что в 64-битном тотале эти панели имеют банальный класс Window, посему отличить их от других 6 таких "окон" сложно... Но если присмотреться, то дочерние окна есть только у трех окон окна тотала (прям масло масляное): у этих двух панелей и у панели со строками состояния и функциональных клавиш. У интересующих нас панелей есть дочерние окна выпадающего списка дисков, строки состояния, заголовков путей и т.п. Блин, неохота городить такие огороды...
В принципе, есть довольно приличный вариант из извращенных. Верхняя панель заканчиается на 1 пиксель выше сепаратора, нижняя начинается на 1 пиксель ниже... Сепаратор я по-любому нахожу, потом можно пройтись по окнам, посмотреть их позиции и размеры...
Блин, и тут не всё так, как надо... Если включена вторая панель кнопок дисков, она располагается между сепаратором и нижней панелью...
Добавлено: Пн мар 12, 2012 10:33
MVV
Не пойму, почему такое странное поведение при использовании
PostMessage. Задаю позицию сепаратора (0,112), она ставится (0,110), задаю позицию (0,816), она ставится (0,818). Похоже, стоит вернуться к
SendMessage.
В общем, свершилось.

Добавлена поддержка работы с вертикальным размещением панелей.
TCFS2Tools 1.4.2.150
Проверяйте, всё ли работает, т.к. вернулся к
SendMessage от
PostMessage в функции установки сепаратора.
Отписал Гислеру про неумирающие всплывающие подсказки с процентами. Если он это исправит, можно будет убрать режим
set_separator(-2).
Добавлено: Пн мар 12, 2012 14:28
Flasher
MVV
Хм. Поборол таки.) Только определение активной панели в обратном ключе работает.
Про подсказки - хоть и не вовремя, но лучше поздно, чем никогда. Дал бы ссылку сразу что ль.

Добавлено: Пн мар 12, 2012 14:55
MVV
Flasher писал(а):MVV
Хм. Поборол таки.)
Ну дык) главное, что пришел к удовлетворяющему меня алгоритму. Ищу эти две пресловутых панели по наличию у них дочерней панели с текстом, начинающимся символом '[' (панель с меткой диска, есть всегда, даже если выключена в настройках) - плюс в том, что можно искать только 1 раз, т.к. они не удаляются тоталом во время работы, в отличие от списков файлов. Далее беру сумму высот панелей плюс 4, она совпадает с тем числом, которое сам тотал передаёт функции
MulDiv. Для горизонтального размещения панелей по-прежнему используется ширина клиентской части окна.
Flasher писал(а): Только определение активной панели в обратном ключе работает.
Поясни, не пойму.
Flasher писал(а):Про подсказки - хоть и не вовремя, но лучше поздно, чем никогда. Дал бы ссылку сразу что ль.

http://ghisler.ch/board/viewtopic.php?t=33951
Добавлено: Пн мар 12, 2012 15:11
Flasher
MVV писал(а):плюс в том, что можно искать только 1 раз, т.к. они не удаляются тоталом во время работы, в отличие от списков файлов.
Ага, хоть тут повезло.
MVV писал(а):Поясни, не пойму.
Определяется другая панель вместо активной, если использовать те же команды, что при вертикальном расположении.
+ за ссылку.
Добавлено: Пн мар 12, 2012 15:20
sa
MVV
Впечатление, что вместо предполагаемого увеличения, активная панель уменьшается и наоборот.
Надо, наверное, IsVerticalPanels как-то учитывать?
Добавлено: Пн мар 12, 2012 16:08
MVV
Да,
sp_set_active(30) ставит сепаратор на 70 при активной верхней. Посмотрю.
Добавлено спустя 23 минуты:
Обновил файл.
sa писал(а):MVV
Впечатление, что вместо предполагаемого увеличения, активная панель уменьшается и наоборот.
Надо, наверное, IsVerticalPanels как-то учитывать?
Нет, проблема была в другом. Условие сравнения позиций панелей было некорректным, потому при вертикальном разделении левой становилась нижняя, а не верхняя. Теперь панель считается левой, если её координаты по X и по Y не больше координат второй панели:
Код: Выделить всё
int left=lbrc[0].left<=lbrc[1].left && lbrc[0].top<=lbrc[1].top ? 0 : 1;
Добавлено: Пн мар 12, 2012 16:15
sa
MVV писал(а):Обновил файл.
Теперь нормально.
Добавлено: Пн мар 12, 2012 20:02
MVV
Вот и отлично.
Кстати, Гислер не прочь исправить баг с всплывающей подсказкой над сепаратором.
Добавлено: Вт мар 13, 2012 16:20
sa
MVV
Заметил такой эффект.
1. Смещаю разделитель панелей от середины.
2. С помощью sp_set_active(50) возвращаю в середину.
3. Перехожу в режим “панели одна над другой”: разделитель уходит в выбранное в предыдущем режиме смещённое положение.
Если пункт 2 выполняю средствами TC, то всё нормально.
Добавлено: Вт мар 13, 2012 16:51
MVV
Ну, видимо, при удаленном командовании тотал в своих внутренних переменных не запоминает, что сепаратор был сдвинут. Тот же эффект можно заметить и с любым другим процентом.
Если надо ставить на середину, используй tcm(909), на другие проценты скорее всего так не получится.
Ага, а вот и косяки SendMessage вместо PostMessage. Прям палка о двух концах. С PostMessage позиция ставится криво (я писал выше - задаю одну координату, получаю другую), с SendMessage она не запоминается... Похоже, придётся вернуть PostMessage, лучше погрешность в 2 пикселя, чем такие косяки с сохранением позиции...
Добавлено: Ср мар 14, 2012 14:51
sa
MVV писал(а):Похоже, придётся вернуть PostMessage, лучше погрешность в 2 пикселя, чем такие косяки с сохранением позиции...
Тем более, что разделитель сейчас теряет позицию и при изменении размеров окна TC, его сворачивании/разворачивании и т.п. случаях.
Добавлено: Ср мар 14, 2012 15:45
MVV
Обновил файл, вернул обратно
PostMessage вместо
SendMessage. Повторяю, при установке позиции может быть некоторая погрешность (при этом определяется позиция правильно).
TCFS2Tools 1.4.2.154
Добавлено: Ср мар 14, 2012 16:02
sa
MVV писал(а):вернул обратно PostMessage вместо SendMessage
Теперь хорошо.
MVV писал(а):при установке позиции может быть некоторая погрешность
Если постараться, то заметить погрешность можно, но на что реально это может отрицательно повлиять, пока не представляю.