Как запретить изменение размеров окна в 1С 7.7 с помощью FormEx?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В процессе разработки интерфейсов на платформе 1С 7.7 часто возникает потребность зафиксировать размер формы, чтобы пользователь не мог его изменить. В отличие от модальных форм, где эта настройка доступна в свойствах, обычные формы лишены такой штатной опции. Мы разберем, как реализовать подобное поведение с помощью внешней компоненты FormEx.

Разбор проблемы

Основная сложность заключается в том, что системное событие ПриИзмененииРазмераОкна срабатывает на ранних этапах инициализации формы. Если мы попытаемся принудительно задать ширину и высоту окна сразу при открытии, это может привести к мерцанию, некорректному позиционированию элементов или к тому, что система попросту проигнорирует наши команды. Важно также понимать, что попытка задать размеры жестко «в лоб» часто конфликтует с оконным менеджером Windows.

Пошаговое решение задачи

Для того чтобы добиться стабильного результата, воспользуемся компонентой РасширениеФормы из состава FormEx. Рассмотрим порядок действий, который позволит нам зафиксировать геометрию окна.

  1. Инициализация расширения: Необходимо подключить РасширениеФормы в процедуре ПослеСозданияФормы. Именно это событие является оптимальным, так как оно срабатывает, когда структура формы уже сформирована, но окно еще не успело «скакнуть» в непредвиденные размеры.
  2. Запоминание эталонных размеров: В той же процедуре ПослеСозданияФормы мы сохраняем начальные значения ширины, высоты и позиции формы в переменные модуля.
  3. Контроль в событии изменения: В процедуре ПриИзмененииРазмераОкна мы будем сравнивать текущие параметры окна с нашими эталонными значениями и возвращать их обратно в случае отклонения.

Пример программной реализации

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


Перем гРФорма, СтараяШирина, СтараяВысота, Верх;

// Вызывается платформой при создании формы
Процедура ПослеСозданияФормы()
    гРФорма = СоздатьОбъект("РасширениеФормы");
    гРФорма.УстановитьФорму(Форма);
    // Принудительно отключаем максимизацию
    гРФорма.Максимизирована = 0;
    // Запоминаем текущие (штатные) размеры
    СтараяШирина = гРФорма.Ширина;
    СтараяВысота = гРФорма.Высота;
    Верх = гРФорма.Верх;
КонецПроцедуры

// Событие FormEx, срабатывающее при попытке пользователя изменить размер окна
Процедура ПриИзмененииРазмераОкна(ТипСобытия, Ширина, Высота)
    Если ПустоеЗначение(гРФорма) = 1 Тогда
        Возврат;
    КонецЕсли;

    // Если размеры изменились, возвращаем их к эталонным
    Если (Ширина <> СтараяШирина) или (Высота <> СтараяВысота) Тогда
        гРФорма.Ширина = СтараяШирина;
        гРФорма.Высота = СтараяВысота;
        гРФорма.Верх = Верх;
        гРФорма.Максимизирована = 0;
    КонецЕсли;
КонецПроцедуры

Важные замечания

Рассмотрим несколько нюансов, которые помогут сделать интерфейс более профессиональным:

Таким образом, использование предложенного кода позволяет добиться «эффекта модальности» без принудительной остановки выполнения программы. Форма остается интерактивной, но сохраняет свои исходные пропорции независимо от действий пользователя.

← На главную