Перейти к основному содержимому
Версия: 4.x

Инструкция DESIGN

Инструкция DESIGN - изменение дизайна формы.

Синтаксис

Синтаксис представляет собой вложенные друг в друга блоки инструкций дизайна. Внешний блок, начинающийся с ключевого слова DESIGN, определяет форму, дизайн которой будет изменяться:

DESIGN formName [caption] [CUSTOM] {
designStatement1
...
designStatementN
}

Каждый designStatement описывает одну инструкцию дизайна. Инструкции дизайна бывают следующих типов:

NEW name [insertPos] [{...}];
MOVE selector [insertPos] [{...}];
selector [{...}];
REMOVE selector;
propertyName = value;

Первые три инструкции: создание (NEW), перемещение (MOVE) и *редактирование *могут в свою очередь содержать вложенные блоки инструкций дизайна. Инструкции дизайна удаление (REMOVE) и изменение значения свойства (=) являются простыми одиночными инструкциями. Каждая инструкция дизайна должна завершаться точкой с запятой, если в ней не содержится вложенный блок инструкций.

Каждый selector может быть одного из следующих типов:

componentName
PROPERTY(formPropertyName)
FILTERGROUP(filterGroupName)
PARENT(selector)
GROUP([propertyGroupSelector][,groupObjectTreeSelector])
noGroupObjectTreeContainerType
groupObjectTreeContainerType(groupObjectTreeSelector)

В свою очередь, groupObjectTreeSelector может быть одного из двух видов:

groupObjectSelector
TREE treeSelector

Описание

При помощи инструкции DESIGN разработчик может управлять дизайном интерактивного представления формы путем создания, перемещения и удаления контейнеров и компонент, а также задания им определенных свойств. По умолчанию для каждой формы создается дизайн по умолчанию вместе с соответствующими контейнерами. При необходимости можно пересоздать дизайн без созданных по умолчанию контейнеров и выполненных ранее настроек. Осуществляется это с помощью ключевого слова CUSTOM.

Каждый блок инструкций дизайна, заключенный в фигурные скобки, позволяет изменять некоторый компонент и его потомков, будем называть этот компонент текущим компонентом либо *текущим контейнером, *если нам известно, что компонент в данной ситуации должен являться контейнером. Во внешнем блоке, идущем после ключевого слова DESIGN, текущим компонентом является контейнер main. Существует следующие виды инструкций дизайна:

  • Инструкция создания (NEW) позволяет создать новый контейнер, делая его потомком текущего контейнера. Текущим компонентом в блоке инструкций дизайна, содержащемся в этой инструкции, будет являться созданный контейнер.
  • Инструкция перемещения (MOVE) позволяет сделать некоторый существующий компонент непосредственным потомком текущего контейнера. Предварительно этот компонент удаляется из предыдущего родительского контейнера. Текущим компонентом в блоке инструкций дизайна, содержащемся в этой инструкции, будет являться перемещаемый компонент.
  • Инструкция редактирования позволяет изменить указанный компонент, который должен являться потомком (не обязательно непосредственным) текущего контейнера. Текущим компонентом в блоке инструкций дизайна, содержащемся в этой инструкции, будет являться указанный элемент.
  • Инструкция удаления (REMOVE) позволяет удалить указанный компонент из иерархии компонентов. Удаляемый компонент должен являться потомком текущего контейнера.
  • Инструкция изменения значения свойства (=) позволяет изменить значение указанного свойства текущего компонента.

Иерархия компонент, описываемая в рамках одной инструкции, может иметь произвольный уровень вложенности и описывать любое количество компонентов и их свойств на каждом из уровней.

Для обращения к компонентам дизайна можно использовать их имя, а также обращаться к компонентам свойств на форме (PROPERTY), родительскому компоненту (PARENT), контейнерам групп свойств (GROUP) и другим базовым компонентам / компонентам дизайна по умолчанию.

Параметры

Общие параметры

  • formName

    Имя изменяемой формы. Составной идентификатор.

  • caption

    Новый заголовок формы в интерактивном режиме отображения. Строковый литерал. В навигаторе заголовок формы при этом не изменяется.

  • name

    Имя создаваемого контейнера. Простой идентификатор.

  • insertPos

    Позиция вставки или перемещения компонента. Задается одним из следующих вариантов:

    • BEFORE selector

    • AFTER selector

      Указание того, что компонент должен быть добавлен или перенесен до (BEFORE) или после (AFTER) указанного компонента. Указанный компонент должен быть непосредственным потомком текущего контейнера.

    • FIRST

      Ключевое слово, которое указывает на то, что компонент должен быть добавлен или перенесен на первое место в списке потомков текущего контейнера.

  • propertyName

    Имя свойства компонента. Список существующих свойств перечислен в таблицах ниже.

  • value

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

Свойства компонентов

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
sizeБазовый размер компонента в пикселях (значение -1 означает, что размер не установлен)Пара целочисленных литералов (ширина, высота)(-1, -1)(100, 20)
heightБазовый размер компонента по высоте в пикселях.Целочисленный литерал-150
widthБазовый размер компонента по ширине в пикселях.Целочисленный литерал-120
backgroundЦвет, который будет использоваться для отображения фона компонентаЛитерал класса COLOR#FFFFFF#FFFFCC
RGB(255, 0, 0)
foregroundЦвет, который будет использоваться для отображения текста компонентаЦветNULL#FFFFCC
RGB(255, 0, 0)
fontШрифт, который будет использоваться для отображения текста компонента, например, значения свойства, заголовка действия, текста в таблицеСтроковый литералзависит от компонента'Tahoma bold 16'
'Times 12'
fontSizeРазмер шрифта, который будет использоваться для отображения текста компонентаЧисловой литералзависит от компонента10
fontStyleСтиль шрифта, который будет использоваться для отображения текста компонента. Может содержать слова 'bold' и/или 'italic', либо пустую строкуСтроковый литерал'''bold'
'bold italic'
defaultComponentУказание того, что на данный компонент должен быть выставлен фокус при инициализации формы. Может быть установлен только для одного компонента на всей формеДополненный логический литералFALSETRUE
FALSE
align
alignment
Способ выравнивания компонента внутри контейнера. Допустимые значения: START (В начале), CENTER (В центре), END (В конце), STRETCH (Растянуть).Тип выравниванияSTARTSTRETCH
flexКоэффициент расширения. Значение свойства, аналогичного свойству CSS flex-grow. Задает насколько компонент должен расти в размерах относительно других компонентовЛитерал типа NUMERIC00.25
fillАналогично свойству flex, но кроме того, если устанавливается нулевое значение, то свойство align устанавливается в START, иначе align устанавливается в STRETCHЛитерал типа NUMERIC01.5
noSortЗапрет сортировкиЛогический литералFALSETRUE
FALSE
defaultCompareФильтр по умолчанию. Допустимые значения: EQUALS, GREATER, LESS, GREATER_EQUALS, LESS_EQUALS, NOT_EQUALS, START_WITH, CONTAINS, ENDS_WITH, LIKE.Строковый литералCONTAINSSTART_WITH
marginTopОтступ сверхуЦелочисленный литерал03
marginRightОтступ справаЦелочисленный литерал01
marginBottomОтступ снизуЦелочисленный литерал04
marginLeftОтступ слеваЦелочисленный литерал01
marginОтступ. Устанавливает одинаковое значение свойствам marginTop, marginRight, marginBottom, marginLeftЦелочисленный литерал05

Свойства контейнеров

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
captionЗаголовок контейнераСтроковый литералNULL'Заголовок'
typeТип контейнера. Допустимые значения:
CONTAINERV - вертикальный контейнер
CONTAINERH - горизонтальный контейнер
COLUMNS - колоночный контейнер
SPLITV - вертикальный сплиттер
SPLITH - горизонтальный сплиттер
TABBED - панель закладок
SCROLL - контейнер с прокруткой, должен иметь не более одного непосредственного потомка
Тип контейнераCONTAINERVCONTAINERH
TABBED
childrenAlignmentСпособ выравнивания дочерних компонентов внутри контейнера. Допустимые значения: START, CENTER, ENDТип выравниванияSTARTCENTER
columnsКоличество колонок в контейнере типа COLUMNSЦелочисленный литерал43
columnLabelsWidthШирина заголовков компонентов в контейнере типа COLUMNSЦелочисленный литерал050
showIfУказание условия, при котором контейнер будет отображатьсяВыражениеNULLisLeapYear(date)
hasComplexity(a, b)

Свойства свойств и действий на форме

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
captionЗаголовок свойства или действияСтроковый литералзаголовок свойства или действия'Заголовок'
askConfirmУказание того, что при попытке редактирования свойства (выполнении действия) будет выполнен запрос на подтверждениеДополненный логический литералFALSETRUE
FALSE
askConfirmMessageТекст вопроса о подтверждении редактирования свойства (выполнении редактирования)Строковый литералсообщение по умолчанию'Вы действительно хотите изменить это свойство?'
autoSizeАвтоматическое определение размера для компонента. Применяется только для текстовых компонентовДополненный логический литералFALSETRUE
FALSE
valueWidthШирина ячейки значения свойства в пикселяхЦелочисленный литералзависит от свойства100
charWidthШирина ячейки значения свойства в символахЦелочисленный литералзависит от свойства10
charHeightВысота ячейки значения свойства в символах (рядах).Целочисленный литералзависит от свойства2
clearTextУказание того, что в начале редактирования свойства должен сбрасываться текущий текстДополненный логический литералFALSETRUE
FALSE
echoSymbolsУказание того, что вместо значения свойства будет показываться набор символов *. Используется, например, для паролейДополненный логический литералFALSETRUE
FALSE
changeKeyКлавиша, при нажатии которой будет начато редактирование свойства. Принцип задания аналогичен заданию параметра в Keystroke.getKeystroke(String)Строковый литералNULL'ctrl F6'
'BACK_SPACE'
'alt shift X'
showChangeKeyУказание того, что в заголовок свойства будет включено название сочетания клавиш, по которому будет начато редактированиеДополненный логический литералTRUETRUE
FALSE
editOnSingleClickУказание того, что при однократном нажатии мышкой на компонент свойства, необходимо начинать редактирование
deprecated, используйте changeOnSingleClick
Дополненный логический литералзависит от свойстваTRUE
FALSE
changeOnSingleClickУказание того, что при однократном нажатии мышкой на компонент свойства, необходимо начинать редактированиеДополненный логический литералзависит от свойстваTRUE
FALSE
captionFontШрифт, который будет использоваться для отображения заголовка свойстваСтроковый литералзависит от компонента'Tahoma bold italic 16'
'Times 12'
hideУказание того, что компонент свойства (действия) должен быть всегда спрятанДополненный логический литералFALSETRUE
FALSE
imagePathПуть к файлу с картинкой, которая будет отображаться в качестве иконки действия. Путь указывается относительно каталога imagesСтроковый литералNULL'image.png'
maxValueМаксимальное числовое значение, которое позволяет ввести компонент свойстваЦелочисленный литералNULL1000000
5000000000L
notNullУказание того, что в случае NULL значения свойства, компонент этого свойства должен быть подсвеченДополненный логический литералnotNull свойстваTRUE
FALSE
panelCaptionAboveУказание того, что в панели необходимо рисовать заголовок компонента свойства или действия сверху от значения
Удалено в версии 5.0, используйте panelCaptionVertical
Дополненный логический литералFALSETRUE
FALSE
panelCaptionVerticalУказание того, что в панели необходимо рисовать заголовок компонента свойства или действия сверху от значенияДополненный логический литералFALSETRUE
FALSE
panelCaptionAfterУказание того, что в панели необходимо рисовать сначала значение, а потом заголовок свойстваДополненный логический литералFALSETRUE
FALSE
regexpРегулярное выражение, которому должно соответствовать значение свойства при редактированииСтроковый литералNULL'^((8|\\+7)[\\- ]?)?(\\(?\\d\{3\}\\)?[\\- ]?)?[\\d\\- ]\{7,10\}$'
regexpMessageСообщение, которое будет выдано пользователю, если он введет значение не соответствующее регулярному выражениюСтроковый литералсообщение по умолчанию'Неправильный формат телефона'
toolTipПодсказка, которая будет показываться при наведении пользователем мышки на заголовок свойства или действияСтроковый литералtoolTip по умолчанию'Подсказка'
patternШаблон форматирования значения свойства. Синтаксис задания шаблона аналогичен синтаксису DecimalFormat либо SimpleDateFormat в зависимости от типа значенияСтроковый литералNULL'#,##0.00'

Свойства тулбара

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
showCalculateSumПоказывать кнопку подсчета суммы по колонкеДополненный логический литералTRUETRUE
FALSE
showCountQuantityПоказывать кнопку подсчета количества рядовДополненный логический литералTRUETRUE
FALSE
showGroupChangeПоказывать кнопку групповой корректировкиДополненный логический литералTRUETRUE
FALSE
showGroupПоказывать кнопку группировочного отчетаДополненный логический литералTRUETRUE
FALSE
showPrintGroupПоказывать кнопку печати таблицыДополненный логический литералTRUETRUE
FALSE
showPrintGroupXlsПоказывать кнопку экспорта таблицы в xls-форматДополненный логический литералTRUETRUE
FALSE
showSettingsПоказывать кнопку настройки таблицыДополненный логический литералTRUETRUE
FALSE

Другие свойства

Имя свойстваДействует дляОписаниеВид значенияЗначение по умолчаниюПримеры
tabVerticalтаблицаУказание того, что переход фокуса между ячейками будет осуществляться сверху вниз, а не слева направоДополненный логический литералFALSETRUE
FALSE
quickSearchтаблицаУказание того, что в таблице будет осуществляться быстрый поиск элементаДополненный логический литералFALSETRUE
FALSE
visibleпользовательский фильтр, дерево классовУказание видимости компонента для задания пользовательских фильтров (дерева классов)Дополненный логический литералTRUETRUE
FALSE

Параметры selector

Примеры

DESIGN order { // настраиваем дизайн формы, начиная с дизайна по умолчанию
// отмечаем, что все изменения иерархии будут происходит для самого верхнего контейнера
// создаем новый контейнер самым первым перед системными кнопками, в который положим два контейнера -
// шапка и спецификации
NEW orderPane FIRST {
fill = 1; // указываем, что контейнер должен занимать все доступное ему место
type = SPLITV; // указываем, что контейнер будет вертикальным сплиттером
MOVE BOX(o) { // переносим в новый контейнер все, что касается объекта o
PANEL(o) { // настроим как отображаются свойства в панели объекта o
type = CONTAINERV; // делаем, чтобы все потомки шли сверху вниз
NEW headerRow1 { // создаем контейнер - первый ряд
type = CONTAINERH;
MOVE PROPERTY(date(o)) { // переносим свойство даты заказа
// "перегружаем" заголовок свойства в дизайне формы (вместо стандартного)
caption = 'Дата редактируемого заказа';
// задаем подсказку для свойства дата заказа
toolTip = 'Введите сюда дату, когда был сделан заказ';
background = #00FFFF; // делаем фон красным
}
MOVE PROPERTY(time(o)) { // переносим свойство времени заказа
foreground = #FF00FF; // делаем цвет зеленым
}
MOVE PROPERTY(number(o)) { // переносим свойство номер заказа
// ставим, что пользователю желательно должно показываться 5 символов
charWidth = 5;
}
MOVE PROPERTY(series(o)); // переносим свойство серия заказа
}
NEW headerRow2 {
type = CONTAINERV; // потомки - сверху вниз
}
MOVE PROPERTY(note(o));
}

size = (400, 300); //указываем, что контейнер o.box должен иметь базовый размер 400x300 пикселей
}
// создаем контейнер, в котором будут хранится различные спецификации по заказу
NEW detailPane {
// помечаем, что этот контейнер должен быть панелью закладок, где закладками являются его потомки
type = TABBED;
// добавляем контейнер с строками заказа как одну из закладок верхней панели
MOVE BOX(d) {
caption = 'Строки'; // задаем заголовок панели закладки
// делаем, чтобы колонка с номером строки никогда не могла иметь фокус
PROPERTY(index(d)) { focusable = FALSE; }
GRID(d) {
// делаем, чтобы по умолчанию фокус при открытии формы устанавливался на таблицу строк
defaultComponent = TRUE;
}
}
MOVE BOX(s) { // добавляем контейнер с итогами по sku как одну из закладок detailPane
caption = 'Подбор';
}
}
}
}

// разбиваем определение формы на две инструкции (вторую инструкцию можно перенести в другой модуль)
DESIGN order {
// убираем из иерархии контейнер с кнопками печати и экспорта в xls, тем самым делая их невидимыми
REMOVE TOOLBARLEFT;
}

На выходе получаем следующую форму: