View previous topic :: View next topic |
Author |
Message |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Wed Mar 07, 2012 14:49 Post subject: |
|
|
На моей винде параметры следующие:
Code: | Размер окна: 800x600.
Размер клиентской части окна: 792x554.
Тотал запущен с чистым конфигом. Тулбар в одну строку (аж 3 кнопки). |
Code: | Включены все галки в настройках Layout.
Первый параметр MulDiv: 416. |
Code: | То же самое, но без галки "показывать две панели букв дисков".
Первый параметр MulDiv: 444. |
Code: | То же самое, но без панелей букв дисков.
Первый параметр MulDiv: 472. |
_________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Last edited by MVV on Wed Mar 07, 2012 14:53; edited 4 times in total |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Sun Mar 11, 2012 10:34 Post subject: |
|
|
Ну в общем-то получить эти числа ручками несложно. Надо найти в окне тотала 2 панели с классом TMyPanel, они расположены за окнами с файлами (собственно, вопрос, что называть файловыми панелями - эти панели или сами списки, которые имеют класс TMyListBox). Кроме того, поверх них лежат все заголовки табуляторов, кнопочки быстрого доступа и т.п. (странно, что списки файлов тупо лежат поверх этих панелей, а не являются дочерними окнами).
В общем, находим расстояние от верха верхней TMyPanel до низа нижней, оно совпадает с тем магическим числом. Проблема в том, что в 64-битном тотале эти панели имеют банальный класс Window, посему отличить их от других 6 таких "окон" сложно... Но если присмотреться, то дочерние окна есть только у трех окон окна тотала (прям масло масляное): у этих двух панелей и у панели со строками состояния и функциональных клавиш. У интересующих нас панелей есть дочерние окна выпадающего списка дисков, строки состояния, заголовков путей и т.п. Блин, неохота городить такие огороды...
В принципе, есть довольно приличный вариант из извращенных. Верхняя панель заканчиается на 1 пиксель выше сепаратора, нижняя начинается на 1 пиксель ниже... Сепаратор я по-любому нахожу, потом можно пройтись по окнам, посмотреть их позиции и размеры...
Блин, и тут не всё так, как надо... Если включена вторая панель кнопок дисков, она располагается между сепаратором и нижней панелью... _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Mon Mar 12, 2012 10:33 Post subject: |
|
|
Не пойму, почему такое странное поведение при использовании PostMessage. Задаю позицию сепаратора (0,112), она ставится (0,110), задаю позицию (0,816), она ставится (0,818). Похоже, стоит вернуться к SendMessage.
В общем, свершилось. Добавлена поддержка работы с вертикальным размещением панелей.
TCFS2Tools 1.4.2.150
Проверяйте, всё ли работает, т.к. вернулся к SendMessage от PostMessage в функции установки сепаратора.
Отписал Гислеру про неумирающие всплывающие подсказки с процентами. Если он это исправит, можно будет убрать режим set_separator(-2). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Mar 12, 2012 14:28 Post subject: |
|
|
MVV
Хм. Поборол таки.) Только определение активной панели в обратном ключе работает.
Про подсказки - хоть и не вовремя, но лучше поздно, чем никогда. Дал бы ссылку сразу что ль.  |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Mon Mar 12, 2012 14:55 Post subject: |
|
|
Flasher wrote: | MVV
Хм. Поборол таки.) |
Ну дык) главное, что пришел к удовлетворяющему меня алгоритму. Ищу эти две пресловутых панели по наличию у них дочерней панели с текстом, начинающимся символом '[' (панель с меткой диска, есть всегда, даже если выключена в настройках) - плюс в том, что можно искать только 1 раз, т.к. они не удаляются тоталом во время работы, в отличие от списков файлов. Далее беру сумму высот панелей плюс 4, она совпадает с тем числом, которое сам тотал передаёт функции MulDiv. Для горизонтального размещения панелей по-прежнему используется ширина клиентской части окна.
Flasher wrote: | Только определение активной панели в обратном ключе работает. |
Поясни, не пойму.
Flasher wrote: | Про подсказки - хоть и не вовремя, но лучше поздно, чем никогда. Дал бы ссылку сразу что ль.  |
http://ghisler.ch/board/viewtopic.php?t=33951 _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Mar 12, 2012 15:11 Post subject: |
|
|
MVV wrote: | плюс в том, что можно искать только 1 раз, т.к. они не удаляются тоталом во время работы, в отличие от списков файлов. | Ага, хоть тут повезло.
MVV wrote: | Поясни, не пойму. | Определяется другая панель вместо активной, если использовать те же команды, что при вертикальном расположении.
+ за ссылку. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Mon Mar 12, 2012 15:20 Post subject: |
|
|
MVV
Впечатление, что вместо предполагаемого увеличения, активная панель уменьшается и наоборот.
Надо, наверное, IsVerticalPanels как-то учитывать? |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Mon Mar 12, 2012 15:46 Post subject: |
|
|
Да, sp_set_active(30) ставит сепаратор на 70 при активной верхней. Посмотрю.
Добавлено спустя 23 минуты:
Обновил файл.
sa wrote: | MVV
Впечатление, что вместо предполагаемого увеличения, активная панель уменьшается и наоборот.
Надо, наверное, IsVerticalPanels как-то учитывать? |
Нет, проблема была в другом. Условие сравнения позиций панелей было некорректным, потому при вертикальном разделении левой становилась нижняя, а не верхняя. Теперь панель считается левой, если её координаты по X и по Y не больше координат второй панели:
Code: | int left=lbrc[0].left<=lbrc[1].left && lbrc[0].top<=lbrc[1].top ? 0 : 1; |
_________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Mon Mar 12, 2012 16:15 Post subject: |
|
|
Теперь нормально. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Tue Mar 13, 2012 16:20 Post subject: |
|
|
MVV
Заметил такой эффект.
1. Смещаю разделитель панелей от середины.
2. С помощью sp_set_active(50) возвращаю в середину.
3. Перехожу в режим “панели одна над другой”: разделитель уходит в выбранное в предыдущем режиме смещённое положение.
Если пункт 2 выполняю средствами TC, то всё нормально. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Tue Mar 13, 2012 16:51 Post subject: |
|
|
Ну, видимо, при удаленном командовании тотал в своих внутренних переменных не запоминает, что сепаратор был сдвинут. Тот же эффект можно заметить и с любым другим процентом.
Если надо ставить на середину, используй tcm(909), на другие проценты скорее всего так не получится.
Ага, а вот и косяки SendMessage вместо PostMessage. Прям палка о двух концах. С PostMessage позиция ставится криво (я писал выше - задаю одну координату, получаю другую), с SendMessage она не запоминается... Похоже, придётся вернуть PostMessage, лучше погрешность в 2 пикселя, чем такие косяки с сохранением позиции... _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Wed Mar 14, 2012 14:51 Post subject: |
|
|
MVV wrote: | Похоже, придётся вернуть PostMessage, лучше погрешность в 2 пикселя, чем такие косяки с сохранением позиции... |
Тем более, что разделитель сейчас теряет позицию и при изменении размеров окна TC, его сворачивании/разворачивании и т.п. случаях. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2693
|
(Separately) Posted: Wed Mar 14, 2012 16:02 Post subject: |
|
|
MVV wrote: | вернул обратно PostMessage вместо SendMessage | Теперь хорошо.
MVV wrote: | при установке позиции может быть некоторая погрешность | Если постараться, то заметить погрешность можно, но на что реально это может отрицательно повлиять, пока не представляю. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|