Руководство разработчика

Изменение размеров диалога

Размер диалогов управляется при помощи полей ширина, высота и авто_размер объектного типа ДИАЛОГ.

Свойство авто_размер применимо только для окон верхнего уровня и MDI-окон, показываемых на экране методами ПОКАЗАТЬ_МДИ и ПОКАЗАТЬ_ВЕРХНЕГО_УРОВНЯ. Это свойство позволяет в автоматическом режиме подбирать нужный размер окна в зависимости от размера доступной клиентской области родительского окна или рабочего стола. При наличии свойства авто_размер, значения свойств ширина и высота игнорируются.

У окон верхнего уровня и MDI-окон изменение размера доступно всегда без дополнительного программирования.

Для всплывающих окон, показываемых на экране методами ПОКАЗАТЬ_МОДАЛЬНЫЙ и ПОКАЗАТЬ, предусмотрено автоматическое изменение размера окна, если его размер больше области показа. Существует два способа изменять размер окна, если оно больше области показа текущего монитора.
Первый способ
Назначение всплывающему окну обработчика размер. Если у диалога есть обработчик размер, то уменьшается ширина и/или высота диалога и вызывается обработчик.
Второй способ
Если обработчик размер не задан, то происходит автоматическая подгонка размера окна под область показа путем уменьшения масштаба отображения диалога (при этом поле окна "масштаб" не изменяется). Чтобы при масштабировании формы не происходило скачкообразного масштабирования шрифтов, то лучше при создании формы использовать векторный шрифт.

Для диалогового окна, у которого изменение размера происходит при помощи обработчика размер, свойства мин_высота и мин_ширина позволяют установить предел, до которого происходит уменьшение размера окна и расположение содержащихся в нем элементов управления. Нужно учитывать, что минимальное значение ширины не может быть меньше 100, а минимальная высота - меньше 50.

Пример

Пример иллюстрирует изменение размера диалогового окна при наличии обработчика размер, в котором задается логика изменения состояния элементов управления при изменении размера окна.

ТИП Диалог1(ДИАЛОГ)
[
  ПОДМЕНА ширина = 450;
  ПОДМЕНА высота = 1600;
  ПОДМЕНА авто_размер = НЕТ;
  ПОДМЕНА размер = {изм_размер};
  ПОДМЕНА шрифт = [ имя = "Tahoma" ];
  ПОДМЕНА центр = НЕТ;

  КНОПКА: КнопкаОК = [ левый = 259,
                       верхний = 1565,
                       ширина = 80,
                       высота = 25,
                       табиндекс = 1001,
                       текст = "ОК",
                       нажатие = {НажатаОК} ];
  КНОПКА: КнопкаОтмена = [ левый = 352,
                           верхний = 1565,
                           ширина = 80,
                           высота = 25,
                           табиндекс = 1002,
                           текст = "Отмена",
                           нажатие = {НажатаОтмена} ];
  СПИСОК_ОПЦИЙ: Список_опций1 = [ левый = 15,
                                  верхний = 15,
                                  ширина = 420,
                                  высота = 1540,
                                  табиндекс = 1003 ];

  ФУНКЦИЯ НажатаОК(ПЕРЕМ КНОПКА: кнопка);
  ФУНКЦИЯ НажатаОтмена(ПЕРЕМ КНОПКА: кнопка);
  ФУНКЦИЯ ЛОГИКА: изм_размер(ПЕРЕМ ДИАЛОГ: форма; 
                             ЧИСЛО: старая_ширина; ЧИСЛО: старая_высота; 
                             ЧИСЛО: новая_ширина; ЧИСЛО: новая_высота);

]

ФУНКЦИЯ Диалог1.НажатаОК(ПЕРЕМ КНОПКА: кнопка)
  ЗАКРЫТЬ("ОК")
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ Диалог1.НажатаОтмена(ПЕРЕМ КНОПКА: кнопка)
  ЗАКРЫТЬ("")
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ ЛОГИКА: Диалог1.изм_размер(ПЕРЕМ ДИАЛОГ: форма; 
                                   ЧИСЛО: старая_ширина; ЧИСЛО: старая_высота; 
                                   ЧИСЛО: новая_ширина; ЧИСЛО: новая_высота)
  ОТЛАДКА(СТР(старая_ширина) + " х " + СТР(старая_высота) +
          " -> " + СТР(новая_ширина) + " х " + СТР(новая_высота))

  ПЕРЕМ ЧИСЛО: дх = новая_ширина - старая_ширина
  ПЕРЕМ ЧИСЛО: ду = новая_высота - старая_высота

  КнопкаОК.левый += дх
  КнопкаОК.верхний += ду

  КнопкаОтмена.левый += дх
  КнопкаОтмена.верхний += ду

  Список_опций1.ширина += дх
  Список_опций1.высота += ду

  РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ

ВЫЧИСЛИТЬ
  ПЕРЕМ Диалог1: д
  д.ПОКАЗАТЬ_МОДАЛЬНЫЙ
КОНЕЦ

См. также: