Доступ к панели строки состояния?

Автор MWW_Ruza, Вчера в 23:54

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

MWW_Ruza

Добрый день!
А вот интересно, сюда:

как-то можно джобраться?
Хочется сделать что-то типа такого:

На вскидку не нашел ничего такого, может плохо искал...

MWW_Ruza

Хотя, наверное действительно плохо искал...
Вот, похоже это:

ДобавитьПанель(<?>,,,,)
Синтаксис:
ДобавитьПанель(<Наименование>,<Заголовок>,<Ширина>,<Стиль>,<Видимость>)
Назначение:
Метод добавляет панель с заданными параметрами. Панель становится текущей. В случае успеха возвращает код новой панели.
Панели, добавленные в основной части глобального модуля (после функций и процедур), будут расположены перед системными. Все остальные после системных.
Параметры:
<Наименование> - наименование панели, не обязательный, по умолчанию пустая строка;
<Заголовок> - заголовок панели, не обязательный, по умолчанию пустая строка;
<Ширина> - ширина панели, не обязательный, по умолчанию 20;
<Стиль> - стиль панели, не обязательный, по умолчанию 0;
<Видимость> - видимость панели, не обязательный, по умолчанию 0.

MWW_Ruza

Да, все ничего... Добавление панели работает.
Так:
Процедура ПриДвойномНажатииЛевойКнопкиВСтрокеСостояния(ИД)
    НайдПан    = Панель.НайтиПоНаименованию("РежОтл");
    Если НайдПан = 0 Тогда
        Если Вопрос("Включить режим сохранения запросов?", 4, 3) = 6 Тогда
            Панель.ДобавитьПанель("РежОтл", "Вкл. реж. сохр. запр.", 120,,1);
        КонецЕсли;
    Иначе
        Если Вопрос("Выключить режим сохранения запросов?", 4, 3) = 6 Тогда
            Панель.УдалитьПанель();    
        КонецЕсли;        
    КонецЕсли;
КонецПроцедуры

Но, УдалитьПанель() крашит 1С... Что я не так делаю?

MWW_Ruza

Хм... И Видимость тоже роняет 1С, так:
Процедура ПриДвойномНажатииЛевойКнопкиВСтрокеСостояния(ИД)
	Если ПустоеЗначение(КодПан) = 0 Тогда
		НайдПан	= Панель.НайтиПоКоду(КодПан);    
	Иначе	
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;
	Панель.ВыбратьПанели();
	Пока Панель.ПолучитьПанель() = 1 Цикл
		Если Панель.Код = КодПан Тогда
			Если Панель.Видимость = 0 Тогда
				Если Вопрос("Включить режим сохранения запросов?", 4, 3) = 6 Тогда
					Панель.Видимость = 1;	
				КонецЕсли;
			Иначе
				Если Вопрос("Выключить режим сохранения запросов?", 4, 3) = 6 Тогда
					Панель.Видимость = 0;    
				КонецЕсли;				
			КонецЕсли;
			Прервать;
		КонецЕсли;    
	КонецЦикла;
КонецПроцедуры

MWW_Ruza

Понятно...
Если при "выключении" панели кликать на ней, то ничего не падает. А если в любом другом месте строки состояния - то краш... Буду думать, как обойти.

MWW_Ruza

В общем, вот так работает:
Процедура ПриДвойномНажатииЛевойКнопкиВСтрокеСостояния(Конт, ИДпанели)
	Если ПустоеЗначение(КодПан) = 0 Тогда
		НайдПан	= Панель.НайтиПоКоду(КодПан);    
	Иначе	
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;
	Панель.ВыбратьПанели();
	Пока Панель.ПолучитьПанель() = 1 Цикл
		Если Панель.Код = КодПан Тогда
			Если Панель.Видимость = 0 Тогда
				Если Вопрос("Включить режим сохранения запросов?", 4, 3) = 6 Тогда
					Панель.Видимость = 1;	
				КонецЕсли;
			Иначе
				Если ИДпанели = Панель.Код Тогда
					Если Вопрос("Выключить режим сохранения запросов?", 4, 3) = 6 Тогда
						Панель.Видимость = 0;    
					КонецЕсли;
				КонецЕсли;				
			КонецЕсли;
			Прервать;
		КонецЕсли;    
	КонецЦикла;
КонецПроцедуры
Думаю, так и через Добавление/Удаление панели заработает...
Но, теперь уже завтра.

vladmenleo

Цитата: MWW_Ruza от Сегодня в 01:45Думаю, так и через Добавление/Удаление панели заработает...
У меня вот так работает уже достаточно давно
КодНовойПанели = Панель.ДобавитьПанель("ПанельПрогресс","",150,0,1);
и в конце
Панель.НайтиПоКоду(КодНовойПанели);
Панель.УдалитьПанель();

MWW_Ruza

Ну, да, работает и через удаление панели.
Окончательный вариант:
Процедура ПриДвойномНажатииЛевойКнопкиВСтрокеСостояния(Конт, ИДпанели)
	Перем КодПан;
	НайдПан	= Панель.НайтиПоНаименованию("РежОтл");
	Если НайдПан = 0 Тогда
		Если Вопрос("Включить режим сохранения запросов?", 4, 3) = 6 Тогда
		 	КодПан 	= Панель.ДобавитьПанель("РежОтл", "Вкл. реж. сохр. запр.", 120,,1);
		 	ЗапЗапр	= 1;
		КонецЕсли;
	Иначе
		Если Панель.Код = ИДпанели Тогда
			Если Вопрос("Выключить режим сохранения запросов?", 4, 3) = 6 Тогда
				Панель.УдалитьПанель();
				ЗапЗапр	= 0;
			КонецЕсли;			
		КонецЕсли; 	
	КонецЕсли;
КонецПроцедуры
Видимо, падение 1С было по тому, что я вызывал ее из предопределенной процедуры "ПриДвойномНажатииЛевойКнопкиВСтрокеСостояния", а когда фокус был не на этой панели, это приводило к крашу 1С.
Вот, видеоролик, что получилось:
https://cloud.mail.ru/public/oSXW/vumQUv6w7
В общем-то, я это делал не для клиентов а для себя, просто в конфе много http запросов, и иногда хочется сохранять в файлы содержимое ответов, до обработки в дальнейшем алгоритме, там куча мест для этого, в обычное время закомментированных, которые приходилось раскомменитровать для этого, а потом опять комментироваь. А это, типо включение "отладки запросов" на ходу. Даже если клиент "с дуру" кликнет на панели окон, там таймаут 3 секунды, за которые он не сможет даже осознать, что за вопрос выскочил. А кто понимает что это и зачем, нормально.
Можно было конечно и без этой предопределенной процедуры обойтись, через комбинацию клавишь включать, но, так мне проще показалось.

PS ЗапЗапр - глобальная экспортная переменная, через которую включается запись запросов.   

MWW_Ruza

Единственное, чисто теоретически, не по тому, что это нужно, а просто интересно...
Как вот это можно реализовать:
"Панели, добавленные в основной части глобального модуля (после функций и процедур), будут расположены перед системными. Все остальные после системных."
Ведь, основная часть любого модуля, в том числе и глобального, отрабатывает до процедур/функций самого модуля, а ФормЕкс грузится уже после этого, в процедуре "ПриНачалеРаботыСистемы", и в основной части ГМ, он будет не доступен...
Как-то не понимаю, как это может работать.