Имя: Пароль:
1C
1C 7.7
v7: Запретить изменение размеров окна
,
0 MWWRuza
 
гуру
23.02.22
01:43
Добрый день!
Хочу получить что-то такое, как при снятой "галочке" - "Изменять размер" в свойствах формы, и модальном режиме, только без модальности...
Формексом, делаю так:

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    РасшФорма = СоздатьОбъект("РасширениеФормы");
    РасшФорма.УстановитьФорму(Форма);
    СтарШирина    = РасшФорма.Ширина;
    СтарВысота  = РасшФорма.Высота;    
    РасшФорма.Ширина = СтарШирина;
    РасшФорма.Высота = СтарВысота;
КонецПроцедуры

Казалось-бы, ничего сложного, должно работать... Но, не работает.
Старые размеры получаю, в отладке вижу, а новые не устанавливаются. При этом, если явно, числами прописать размеры - то срабатывает...
Знатоки формекса, подскажите плиз?
1 Злопчинский
 
23.02.22
02:35
Где числами прописать размеры(?)
2 Злопчинский
 
23.02.22
02:36
С моей точки зрения код бредовый
3 Злопчинский
 
23.02.22
02:40
СтарШирина = РасшФорма.Ширина
РасшФорма.Ширина = СтарШирина;

СтарВысота  = РасшФорма.Высота;    
РасшФорма.Высота = СтарВысота;

Мне кажется что от такого кода ничего не изменится
4 MWWRuza
 
гуру
23.02.22
09:58
В том-то и дело, что ничего не меняется...
Вот так:

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    РасшФорма     = СоздатьОбъект("РасширениеФормы");
    РасшФорма.УстановитьФорму(Форма);
    СтарШирина    = РасшФорма.Ширина;
    СтарВысота  = РасшФорма.Высота;    
//    РасшФорма.Ширина = 318;
//    РасшФорма.Высота = 325;
КонецПроцедуры

В отладчике получаю:

СтарШирина = 318
СтарВысота = 325

Потом, делаю так:

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    РасшФорма     = СоздатьОбъект("РасширениеФормы");
    РасшФорма.УстановитьФорму(Форма);
//    СтарШирина    = РасшФорма.Ширина;
//    СтарВысота  = РасшФорма.Высота;    
    РасшФорма.Ширина = 318;
    РасшФорма.Высота = 325;
КонецПроцедуры

комментирую получение исходной ширины/высоты и задаю ширину и высоту полученными числами явно.
Пытаюсь менять размеры открытой формы - не меняются, она только противно мелькает при попытке изменить размер, но размер остается тем-же...
А вместе - в одной процедуре не работает, размеры меняются как хочешь, как будто и нет этой процедуры...
Не то, что-бы это было особо нужно, просто хочу разобраться.
5 MWWRuza
 
гуру
23.02.22
10:12
Чисто с прикладной стороны, самое красивое поведение формы штатное, без формекса, со снятой галкой "Изменять размер" и при открытии ее модально. Окошко фиксированного размера, не зависит от того, максимизированы ли другие формы, или нет, таскается по всему экрану за заголовок как хочешь... Думал, формексом нечто-подобное сотворить без модальности, но не получается...
6 delavar
 
23.02.22
10:14
Через обработчик ожидание с интервалом в 0.1 сек. Такой прием часто использовали в старых конфах на УФ
7 MWWRuza
 
гуру
23.02.22
10:37
(6) Попробовал:

Перем РасшФорма;
Перем СтарШирина;
Перем СтарВысота;

Процедура ИзмРазмФормы()
    РасшФорма.Ширина = СтарШирина;
    РасшФорма.Высота = СтарВысота;
    РасшФорма.ОбработкаОжидания("",0);
    РасшФорма = "";
КонецПроцедуры    

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    РасшФорма     = СоздатьОбъект("РасширениеФормы");
    РасшФорма.УстановитьФорму(Форма);
    СтарШирина    = РасшФорма.Ширина;
    СтарВысота  = РасшФорма.Высота;    
    РасшФорма.ОбработкаОжидания("ИзмРазмФормы", 100);
КонецПроцедуры

Все равно не работает...
8 uno-group
 
23.02.22
10:40
При открытии формы запоминай старые размеры и потом не давай их менять
9 Злопчинский
 
23.02.22
10:58
мдя, весьма интересное поведение, особенно при задании старых размеров числами явно - работает, через переменные - не работает. даже с попыткой явного приведения к числу через Число(СтарВысота);
10 Злопчинский
 
23.02.22
11:11
хм, а чтобы, например, нужную форму не открыть в модальном режиме если не хочется менять размер?
11 Злопчинский
 
23.02.22
11:13
Вот так - работает
12 Злопчинский
 
23.02.22
11:14
Перем РасшФорма;
Перем СтарШирина;
Перем СтарВысота;
Перем Я;

Процедура ИзмРазмФормы()
   Сообщить(ТекущееВремя()+": ИзмРазмФормы()");
   РасшФорма.ОбработкаОжидания("",0);
   РасшФорма.Ширина = СтарШирина;
   РасшФорма.Высота = СтарВысота;
КонецПроцедуры    

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
   Сообщить(ТекущееВремя()+": ПриИзмененииРазмераОкна()");
   Если Я = 0 Тогда Возврат; КонецЕсли;
   РасшФорма.ОбработкаОжидания("ИзмРазмФормы", 100);
КонецПроцедуры

Процедура ПослеОткрытия()
   Я = 1; Сообщить(ТекущееВремя()+": ПослеОткрытия()");
   РасшФорма = СоздатьОбъект("РасширениеФормы");
   СтарШирина = РасшФорма.Ширина;
   СтарВысота = РасшФорма.Высота;    
КонецПроцедуры

Я = 0;
13 MWWRuza
 
гуру
23.02.22
11:15
(8) Хм...
Тут, какая-то фигня получается - такое чувство, что ловятся размеры формы пока она еще не до конца открылась, что-то в районе 200... И такие размеры фиксируются.
Попробовал перенести получение размеров в процедуру "ПослеОткрытия()", еще хуже:
СтарШирина = 112
СтарВысота = 0

(10) Да можно конечно, "но мы не ищем легких путей!" :-) По сути, тема "пятничная", хоть вчера был и вторник, но перед выходным.
Кстати, всех с праздником!
14 Ёпрст
 
23.02.22
11:15
(0)
какой то поток сознания. Вообще не вкурил, в чём у тебя проблема, ну окромя того, что (0) в топку


Перем гРФорма,СтараяШирина,СтараяВысота,Лево,Верх;
//======================================================================
Процедура ПослеСозданияФормы()
    гРФорма = СоздатьОбъект("РасширениеФормы");
    гРФорма.УстановитьФорму(Форма);
    гРФорма.Максимизирована=0;
    СтараяШирина = гРФорма.Ширина;
    СтараяВысота = гРФорма.Высота;
    Верх = гРФорма.Верх;
    
КонецПроцедуры // ПослеСозданяФормы
//======================================================================
Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    Если ПустоеЗначение(гРФорма)=1 Тогда
        Возврат;
    КонецЕсли;
    Если (Ширина<>СтараяШирина)или(Высота<>СтараяВысота) Тогда
        гРФорма.Ширина = СтараяШирина;
        гРФорма.Высота = СтараяВысота;
        гРФорма.Верх = Верх;
        
        гРФорма.Максимизирована=0;
    КонецЕсли;
КонецПроцедуры
15 Злопчинский
 
23.02.22
11:17
(13) Приизменении размеров отрабатывается еще до открытия
16 Злопчинский
 
23.02.22
11:21
да, Епрст лучше написал, можно без ОО обойтись
17 Ёпрст
 
23.02.22
11:26
А если еще в ПриНажатииЛевойКнопки  отловить заголовок формы, то можно его навсегда застолбить на одном месте, делая ФСО=0 в этой проце.
18 Ёпрст
 
23.02.22
11:27
+17 * застолбить форму в нужном месте экрана
19 MWWRuza
 
гуру
23.02.22
11:41
Да, так работает, спасибо! :-)

Че-то я процедуру "ПослеСозданияФормы()" проглюядел, уперся в "ПослеОткрытия()", а это конечно не то...
20 Злопчинский
 
23.02.22
11:44
(19) После открытия тоже работает. ты куда-то не там уперся. явно ;-)
21 MWWRuza
 
гуру
23.02.22
11:46
+(19) Единственное отличие от модально открытой формы, что если поверх нее открыть другую форму и максимизировать ее, то при выборе в трее этой формы(типа вытащить ее на передний план), новая тоже становится не максимизированной... В случае модальной формы, такого не происходит, она не влияет на другие формы.