|
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; КонецЕсли;
ОбъектПривязка.ПриДвиженииМыши(Сост, Лево, Верх, ФСО);
КонецПроцедуры
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший