Имя: Пароль:
1C
1C 7.7
v7: Ограничение размера формы обработки при изменении размера окна
0 Тёплый фарфор
 
18.09.17
10:29
Есть ли способ как-то обозначить минимальный размер окна формы и не давать его изменять ниже заданных границ?
Пробовал прикрутить костыли с помощью процедуры formex ПриИзмененииРазмераОкна() + эмуляция клавиши ESC в нужный момент, но как-то кривовато работает.
На формах журналов, справочников и документов ограничение по ширине работает же без шаманства, из коробки.
1 Ёпрст
 
18.09.17
10:34
(0) А зачем эмуляция эскейпа ? Просто возвращать старый(минимально необходимый) размер формы.
2 Тёплый фарфор
 
18.09.17
10:47
(0) ESC - чтобы сбрасывать зажатую ЛКМ и потом установить размер формы.

Дело в том что метод РазмерОкна() работает не стабильно и у меня так и не получилось нормально устанавливать старые размеры.
Пробовал управлять размером и в ПриИзмененииРазмераОкна() и в других процедурах, которые по идее, можно использовать. Но везде как-то не кашерно получается: то форма уплывёт за пределы монитора, то нужно как-то сбросить ЛКМ...
3 Ёпрст
 
18.09.17
12:32
(2) достаточно в ПриИзмененииРазмеровОкна устанавливать нужные размеры и всё.
4 Ёпрст
 
18.09.17
13:01
тип того
Перем РасшФорма


Процедура ПриОткрытии()
    Попытка
        РасшФорма = СоздатьОбъект("РасширениеФормы");
    Исключение
        Если ЗагрузитьВнешнююКомпоненту("Formex.dll")=0 Тогда
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
        РасшФорма = СоздатьОбъект("РасширениеФормы");
    КонецПопытки;
КонецПроцедуры
//*******************************************
Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
    Если ТипЗначения(РасшФорма)=100 Тогда
        Если Ширина<300 Тогда
            РасшФорма.Ширина= 300;
        КонецЕсли;
        Если Высота<300 Тогда
            РасшФорма.Высота= 300;
        КонецЕсли;
    Иначе
        Возврат;
    КонецЕсли;
КонецПроцедуры
5 Тёплый фарфор
 
18.09.17
13:19
В общем то да, это самое лучше решение. Не догадался в СП посмотреть. Всё смотрел на объект "Окна".
Правда форма дёргается постоянно, пока зажата ЛКМ и изменяются размеры программно, ну и ладно..
Спасибо!
6 Ёпрст
 
18.09.17
13:29
(5) ну, Чтоб не дёргалась, можно фсо в 0 затачивать в ПриДвиженииМыши
7 Ёпрст
 
18.09.17
13:30
если состояние =1 и флаг какой-нить хранить в приИзмененииРазмеровОкна
8 Тёплый фарфор
 
18.09.17
13:50
теперь всё в шоколаде:

Процедура ПриИзмененииРазмераОкна(ТипСобытия, Ширина, Высота)

    _гФСО=1;
    _гТекШиринаОкна=Ширина; _гТекВысотаОкна=Высота;
    Если ТипЗначения(_гОбРасширениеФормы)=100 Тогда
        Если (_гТекШиринаОкна<_гМинШиринаОкнаФормы) ИЛИ (_гТекВысотаОкна<_гМинВысотаОкнаФормы) Тогда
            _гОбРасширениеФормы.Ширина=_гМинШиринаОкнаФормы;
            _гОбРасширениеФормы.Высота=_гМинВысотаОкнаФормы;
            _гФСО=0;
        КонецЕсли;    
    КонецЕсли;
    
    ОбъектПривязка.ПриИзмененииРазмераОкна(ТипСобытия, Ширина, Высота);

КонецПроцедуры

Процедура ПриДвиженииМыши(Сост, Лево, Верх, ФСО)
    Если Сост=1 Тогда ФСО=_гФСО; Иначе _гФСО=1; КонецЕсли;
    ОбъектПривязка.ПриДвиженииМыши(Сост, Лево, Верх, ФСО);
КонецПроцедуры
AdBlock убивает бесплатный контент. 1Сергей