ПанельСтрокиСостояния - Что то не так

Автор mEnter, 25 апреля 2024, 22:28

« назад - далее »

Djelf

Выглядит нормально, без глюков.

Но на скрине в #8 Панели БИ и ТП обрезаны, тут уже нормальный размер...

Остается вопрос: как воспроизвести то что сейчас все нормально, а тогда было не ненормально?
Вот поэтому скрин и просил, не знал как такого добиться, возможно была какая-то странная разница в составе компонентов, но нет.
З.Ы. нужен был первый скрин, с версией 1С 7.7 и ее компонентов (я его успел увидеть), но там все в порядке, 7.70.027 и полный комплект компонентов.

Есть смутное подозрение, что виноват флаг Растягиваемая, которая должна быть только в одной Панели, как написано в als.
Лучше бы все флаги Панелей при глюке сдампить в ТЗ, может станет понятнее.

mEnter

 :) Так вывод идет постоянно. Замирает если открыта модальная форма, выше на картинке я поймал фоткой момент когда  строку ТекущийСтатус 11111111 видно. Строчка моргает постоянно. Если форма открыта не модальная моргание продолжается.
Да иногда видно что панели все сжимаются да минимума и разжимаются.

Видео попробую вставить

Djelf

Цитата: mEnter от 27 апреля 2024, 16:28Замирает если открыта модальная форма
И как это совпадает с Вашим утверждением что открыта пустая конфигурация без прочих изменений?

Еще раз повторяю: нужна тестовая конфигурация с очень детальным описанием Ваших действий, которые приводят к подобным случаям.

mEnter

Хорошо. Пустая конфигурация. Есть только полный журнал. Открываешь его - мигание.
Открываешь Меню - Стопорится.
Открываешь "О программе" - Стопорится.
Открываешь Параметры - Стопорится.
Закрываешь - мигание возобновляется.

Сниму видео - выложу. со всеми этими действиями.

mEnter

Video

Прошу прощения за дрожание левой руки :) Неудобно было

Злоп

Положите архив папки с базой. Чтобы точно как.

Djelf

Так, воспроизвел. Не постоянное моргание, а именно одноразовый вывод "ТекущийСтатус 11111111" при открытии Текста.
Причем не обязательно даже добавлять панель, достаточно загрузить formex.
Вспомнил про Status1C.dll Орефкова: https://www.1cpp.ru/forum/YaBB.pl?num=1224102924/4
Поискал в своей кладовочке исходники, нашел, вот они: https://cloud.mail.ru/public/9vyw/Y8Rw12XiU
Со Status1C.dll не моргает. Надеюсь что эти исходники помогут исправить ситуацию.
Там есть ценное примечание
За работу статусбара в 1С отвечает класс SECStatusBar, размещенный
во frame.dll. Небольшое исследование показало, что во многом он
подобен MFC классу CStatusBar, но есть и отличия.
Например, отличается размер класса.
Так что простая подмена Detach -> Attach CStatusBar не прокатывает.
Значит, надо поработать именно с тем объектом класса,
созданным самой 1С.
Опять же клинические исследования показали, что работа с индикаторами
практически не отличается от MFC.
В частности, совпадают: размещение в классе количества индикаторов
m_nCount (смещение 0x56), указатель на данные об индикаторах
m_pData (0x60), и структура самих данных AFX_STATUSPANE
Также удалось установить, что при смене индикаторов на нестандартные
1С при открытии любых таблиц восстанавливает их. Потому:
1. По адресу ф-ии SECStatusBar::SetIndicators надо прописать заглушку.
Для этого просто возьмем ее адрес и впишем в начало 6 байт {return 1;}
2. При смене индикаторов вызывать SECStatusBar::UpdateAllPanes (protected)
3. Для позиционирования созданных контролов перехватывать SECStatusBar::OnSize
Сделаем это подменой адреса в Message Map.
4. Для работы нестандартных индикаторов перехватывать SECStatusBar::OnUpdateCmdUI.
Ф-ия виртуальная, так что поменяем ее адрес в vTbl.
(Пока не реализовано)

Djelf

Вышесказанное не относится к циклическому вызову void CStatusBarManager::UpdateElements() где и происходит перерисовка.
На доступной версии исходников 2.0.5.197, после добавления трассировки в окно сообщений, видно что вызов этого метода при открытии Журнала не происходит.
Могу выложить сборку, но смысла в этом нет, просто будет спамить еще и в окно сообщений...

А вот ресурс "ТекущийСтатус 11111111" выводится 3 раза, по одному разу на каждую из компонет: торговля, бухгалтерия, расчет (formex`ом).
Затем он исчезает из общей панели.
Как, почему и зачем? Это самый интересный вопрос: какой у этой панели есть признак для появления или подавления появления?
Не понятно где и как (видимо двойная перерисовка).
Зачем он нужен, науке тоже не известно, я ни разу такого состояния не видел.
Возможно это "мертвый" код... (судя по коду Орефкова, он сделал ограничение на вывод подобных панелей).

(0) Ищи спамера в WMMessage. Что-то же дергает 1С? И видимо дергает снаружи или лезет в память и ее портит.
Причин может слишком много для озвучивания: вирус, антивирус, КриптоПро, ТимВьювер и еще бесконечное количество вариантов.
Проверял на 2х разных серверах 2008R2, на WinXP, на Win7x32 и т.д. и т.п.
Сложно искать черную кошку в темной комнате, особенно когда ее там нет...

Можно попробовать трассировать ПриВыводеСтрокиСостояния, ПриПолученииКомандыГлавнымОкном и ПриПолученииСистемнойКомандыГлавнымОкном.

xav

Цитата: Djelf от 28 апреля 2024, 15:27Что-то же дергает 1С
Заметил на видео компоненту "WEB-расширение 2.0", может быть в ней дело?


Djelf

Цитата: xav от 28 апреля 2024, 15:45Заметил на видео компоненту "WEB-расширение 2.0", может быть в ней дело?
У меня такой нет, но (0) может проверить.

mEnter

Расширение ни причем.

Поигравшись с атрибутами  :) , теперь не обязательно даже создавать объект.
Моргание сразу. А где хранятся настройки панели состояния?

Теперь совсем интересно.

объект не создавал -  моргание при старте.
Параметры FormEx Часы - теперь переключают моргание - есть - нет.

mEnter

На текущий момент, все что удалось обнаружить - идет постоянный вывод ресурса 57345. несколько раз в секунду

Djelf

Нашел, https://www.1cpp.ru/forum/YaBB.pl?num=1210673051
Трясение строки зависит от вот этого:
Цитата:
Меню - Сервис - ПанелиИнструментов - Дополнительные - Единая настройка для всех режимов работы

Единая настройка = 1  -- строку состояния трясет
Елиная настройка = 0  -- не трясет.
Переключение этого флажка влияет на эффект сразу при закрытии окна опций.

В реестре это
Цитата:
[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options\TOOLBARS]
"IgnoreLayouts"="1"

mEnter

Точно. Спасибо. Надо это где то записать, чтобы не потерялось. :)

Злоп

Имеет смысл перенести по существу описание проблемы и её решение в ветку "дележка опытом" https://forum.dorex.pro/index.php?topic=94.15