Обработка элементов управления на форме
Элементы управления могут располагаться на формах типа ДИАЛОГ, БЛАНК, ТАБ_ФОРМА.
Обработка элементов управления на форме осуществляется при помощи методов интерфейса И_ЭЛЕМЕНТ. Методы СЧИТАТЬ_ЭЛЕМЕНТ и ЗАПИСАТЬ_ЭЛЕМЕНТ позволяют получить и установить значения полей базового типа ЭЛЕМЕНТ, доступа к которым может не быть (например, нет ссылки на сам элемент управления, соответственно нет доступа к полям). После установки значений полей элемента управления чтобы изменения отразились на физическом объекте формы, применяется метод ОБНОВИТЬ. Подробнее о использовании данного метода см. Изменение состояния элемента управления.
Получить строковый идентификатор элемента управления, напрмер для посылки команд, можно при помощи метода ИДЕНТ.
Для удобства перебора элементов на форме используется цикл ЭЛЕМЕНТЫ. Переменная-счетчик позволяет осуществлять перебор элементов на форме определенного типа (и его дочерних типов). Из-за того, что значение переменной-счетчика устанавливается копированием, изменение поля очередного перебираемого элемента не будет синхронизировано с реальным элементом на форме, поэтому в цикле ЭЛЕМЕНТЫ рекомендуется считывать значения полей, а при необходимости изменения полей нужно создавать ссылки на реальные элементы управления на форме.
В примере ниже рассматривается изменение ширины элементов управления при изменении ширины диалога в обработчике размер. Изменение ширины происходит в цикле ЭЛЕМЕНТЫ: считывается элемент управления на форме (СЧИТАТЬ_ЭЛЕМЕНТ), устанавливается значение поля ширины, новое значение поля записывается в объект (ЗАПИСАТЬ_ЭЛЕМЕНТ) и изменения полей вступают в силу при помощи метода ОБНОВИТЬ.
Пример
ТИП Диалог1(ДИАЛОГ) [ ПОДМЕНА мин_ширина = 200; ПОДМЕНА идент = "ид"; ПОДМЕНА ширина = 450; ПОДМЕНА высота = 500; ПОДМЕНА размер = {изм_размер}; ПОДМЕНА шрифт = [ имя = "Tahoma" ]; ПОДМЕНА центр = НЕТ; СПИСОК_ОПЦИЙ: Список_опций1 = [ левый = 40, верхний = 40, ширина = 360, высота = 225, табиндекс = 1003 ]; СПИСОК: Список1 = [ левый = 40, верхний = 300, ширина = 200, высота = 100, табиндекс = 1004 ] ФУНКЦИЯ ЛОГИКА:изм_размер(ПЕРЕМ ДИАЛОГ: форма; ЧИСЛО: старая_ширина; ЧИСЛО: старая_высота; ЧИСЛО: новая_ширина; ЧИСЛО: новая_высота) ПЕРЕМ ЧИСЛО: дх = новая_ширина - старая_ширина ПЕРЕМ И_ЭЛЕМЕНТ: эл ПЕРЕМ ЭЛЕМЕНТ: элемент ЦИКЛ ЭЛЕМЕНТЫ(форма, эл) элемент = эл.СЧИТАТЬ_ЭЛЕМЕНТ элемент.ширина += дх эл.ЗАПИСАТЬ_ЭЛЕМЕНТ(элемент) эл.ОБНОВИТЬ КОНЕЦ_ЦИКЛА РЕЗУЛЬТАТ = ДА КОНЕЦ_ФУНКЦИИ ] ВЫЧИСЛИТЬ ПЕРЕМ Диалог1: д ЕСЛИ д.ПОКАЗАТЬ_МОДАЛЬНЫЙ <> "" ТО КОНЕЦ_ЕСЛИ КОНЕЦ
Еще один способ изменения значения полей элементов управления в цикле ЭЛЕМЕНТЫ - создание ссылки на реальный элемент управления на форме и изменение значений полей у ссылки приводится ниже.
... ЦИКЛ ЭЛЕМЕНТЫ(форма, эл) ПЕРЕМ& элемент = ОБЪЕКТ(эл, ЭЛЕМЕНТ) элемент.ширина += дх элемент.ОБНОВИТЬ КОНЕЦ_ЦИКЛА ...