Перейти к основному содержимому
Версия: 5.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

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

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

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
spantodoЦелочисленный литерал12
defaultComponentУказание того, что на данный компонент должен быть выставлен фокус при инициализации формы. Может быть установлен только для одного компонента на всей формеДополненный логический литералFALSETRUE
FALSE
activatedtodoЛогический литералFALSETRUE
FALSE
fillАналогично свойству flex, но кроме того, если устанавливается нулевое значение, то свойство align устанавливается в START, иначе align устанавливается в STRETCHЛитерал типа NUMERIC01.5
sizeБазовый размер компонента в пикселях (значение -1 означает, что размер не установлен)Пара целочисленных литералов (ширина, высота)(-1, -1)(100, 20)
heightБазовый размер компонента по высоте в пикселях.Целочисленный литерал-150
widthБазовый размер компонента по ширине в пикселях.Целочисленный литерал-120
flexКоэффициент расширения. Значение свойства, аналогичного свойству CSS flex-grow. Задает насколько компонент должен расти в размерах относительно других компонентовЛитерал типа NUMERIC00.25
shrinktodoЛогический литералFALSETRUE
FALSE
alignShrinktodoЛогический литералFALSETRUE
FALSE
align
alignment
Способ выравнивания компонента внутри контейнера. Допустимые значения: START (В начале), CENTER (В центре), END (В конце), STRETCH (Растянуть).Тип выравниванияSTARTSTRETCH
marginTopОтступ сверхуЦелочисленный литерал03
marginRightОтступ справаЦелочисленный литерал01
marginBottomОтступ снизуЦелочисленный литерал04
marginLeftОтступ слеваЦелочисленный литерал01
marginОтступ. Устанавливает одинаковое значение свойствам marginTop, marginRight, marginBottom, marginLeftЦелочисленный литерал05
captionFontШрифт, который будет использоваться для отображения заголовка компонентаСтроковый литералзависит от компонента'Tahoma bold 16'
'Times 12'
fontШрифт, который будет использоваться для отображения текста компонента, например, значения свойства, заголовка действия, текста в таблицеСтроковый литералзависит от компонента'Tahoma bold 16'
'Times 12'
fontSizeРазмер шрифта, который будет использоваться для отображения текста компонентаЧисловой литералзависит от компонента10
fontStyleСтиль шрифта, который будет использоваться для отображения текста компонента. Может содержать слова 'bold' и/или 'italic', либо пустую строкуСтроковый литерал'''bold'
'bold italic'
backgroundЦвет, который будет использоваться для отображения фона компонентаЛитерал класса COLOR#FFFFFF#FFFFCC
RGB(255, 0, 0)
foregroundЦвет, который будет использоваться для отображения текста компонентаЦветNULL#FFFFCC
RGB(255, 0, 0)
imagePathПуть к файлу с картинкой, которая будет отображаться в качестве иконки действия. Путь указывается относительно каталога imagesСтроковый литералNULL'image.png'
showIfУказание условия, при котором контейнер будет отображатьсяВыражениеNULLisLeapYear(date)
hasComplexity(a, b)

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

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
captionЗаголовок контейнераСтроковый литералNULL'Заголовок'
collapsibletodoЛогический литералFALSETRUE
FALSE
collapsedtodoЛогический литералFALSETRUE
FALSE
typeТип контейнера. Допустимые значения:
CONTAINERV - вертикальный контейнер
CONTAINERH - горизонтальный контейнер
COLUMNS - колоночный контейнер
SPLITV - вертикальный сплиттер
SPLITH - горизонтальный сплиттер
TABBED - панель закладок
SCROLL - контейнер с прокруткой, должен иметь не более одного непосредственного потомкаdeprecated since version 5, используйте horizontal, tabbed, lines
Тип контейнераCONTAINERVCONTAINERH
TABBED
horizontalГоризонтальный контейнерЛогический литералFALSETRUE
FALSE
tabbedКонтейнер с табамиЛогический литералFALSETRUE
FALSE
childrenAlignmentСпособ выравнивания дочерних компонентов внутри контейнера. Допустимые значения: START, CENTER, ENDТип выравниванияSTARTCENTER
alignCaptionstodoЛогический литералFALSETRUE
FALSE
gridtodoЛогический литералFALSETRUE
FALSE
wraptodoЛогический литералFALSETRUE
FALSE
resizeOverflowtodoЛогический литералFALSETRUE
FALSE
customtodoString literalNULLtodo
columnsКоличество колонок в контейнере типа COLUMNS
deprecated since version 5, используйте lines
Целочисленный литерал13
linesКоличество линий (рядов или колонок) в контейнереЦелочисленный литерал13
lineSizetodoЦелочисленный литералNULLtodo
captionLineSizetodoЦелочисленный литералNULLtodo

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

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
autoSizeАвтоматическое определение размера для компонента. Применяется только для текстовых компонентовДополненный логический литералFALSETRUE
FALSE
boxedРисование рамки вокруг компонентаДополненный логический литералTRUETRUE
FALSE
panelCaptionVerticalУказание того, что в панели необходимо рисовать заголовок компонента свойства или действия сверху от значенияДополненный логический литералFALSETRUE
FALSE
panelCaptionLastУказание того, что в панели необходимо рисовать сначала значение, а потом заголовок свойстваДополненный логический литералFALSETRUE
FALSE
panelCaptionAlignmentСпособ выравнивания заголовка компонента. Допустимые значения: START (В начале), CENTER (В центре), END (В конце), STRETCH (Растянуть).Тип выравниванияSTARTSTRETCH
editOnSingleClickУказание того, что при однократном нажатии мышкой на компонент свойства, необходимо начинать редактирование
deprecated, используйте changeOnSingleClick
Дополненный логический литералзависит от свойстваTRUE
FALSE
changeOnSingleClickУказание того, что при однократном нажатии мышкой на компонент свойства, необходимо начинать редактированиеДополненный логический литералзависит от свойстваTRUE
FALSE
focusableУказание того, что компонент свойства (действия) или колонка в таблице могут владеть фокусомДополненный логический литералchangeKey = NULLTRUE
FALSE
hideУказание того, что компонент свойства (действия) должен быть всегда спрятанДополненный логический литералFALSETRUE
FALSE
regexpРегулярное выражение, которому должно соответствовать значение свойства при редактированииСтроковый литералNULL'^((8|\\+7)[\\- ]?)?(\\(?\\d\{3\}\\)?[\\- ]?)?[\\d\\- ]\{7,10\}$'
regexpMessageСообщение, которое будет выдано пользователю, если он введет значение не соответствующее регулярному выражениюСтроковый литералсообщение по умолчанию'Неправильный формат телефона'
patternШаблон форматирования значения свойства. Синтаксис задания шаблона аналогичен синтаксису DecimalFormat либо SimpleDateFormat в зависимости от типа значенияСтроковый литералNULL'#,##0.00'
maxValueМаксимальное числовое значение, которое позволяет ввести компонент свойстваЦелочисленный литералNULL1000000
5000000000L
echoSymbolsУказание того, что вместо значения свойства будет показываться набор символов *. Используется, например, для паролейДополненный логический литералFALSETRUE
FALSE
noSortЗапрет сортировкиЛогический литералFALSETRUE
FALSE
defaultCompareФильтр по умолчанию. Допустимые значения: EQUALS, GREATER, LESS, GREATER_EQUALS, LESS_EQUALS, NOT_EQUALS, CONTAINS, LIKE.Строковый литералCONTAINSGREATER
valueSizeШирина и высота ячейки значения свойства в пикселяхПара целочисленных литералов (ширина, высота)(-1, -1)(100, 100)
valueHeightВысота ячейки значения свойства в пикселяхЦелочисленный литералзависит от свойства100
valueWidthШирина ячейки значения свойства в пикселяхЦелочисленный литералзависит от свойства100
captionHeightВысота заголовка свойства в пикселяхЦелочисленный литерал-1100
captionWidthШирина заголовка свойства в пикселяхЦелочисленный литерал-1100
charHeightВысота ячейки значения свойства в символах (рядах).Целочисленный литералзависит от свойства2
charWidthШирина ячейки значения свойства в символахЦелочисленный литералзависит от свойства10
valueFlextodoЛогический литералFALSETRUE
FALSE
changeKeyКлавиша, при нажатии которой будет начато редактирование свойства. Принцип задания аналогичен заданию параметра в Keystroke.getKeystroke(String)Строковый литералNULL'ctrl F6'
'BACK_SPACE'
'alt shift X'
changeKeyPrioritytodoЦелочисленный литералNULL1000
changeMousetodoСтроковый литералNULL'DBLCLK'
changeMousePrioritytodoЦелочисленный литералNULL1000
showChangeKeyУказание того, что в заголовок свойства будет включено название сочетания клавиш, по которому будет начато редактированиеДополненный логический литералTRUETRUE
FALSE
focusabletodoLogical literalFALSETRUE
FALSE
panelColumnVerticaltodoLogical literalFALSETRUE
FALSE
captionЗаголовок свойства или действияСтроковый литералзаголовок свойства или действия'Заголовок'
valueAlignmentСпособ выравнивания значения компонента. Допустимые значения: START (В начале), CENTER (В центре), END (В конце), STRETCH (Растянуть).Тип выравниванияSTARTSTRETCH
clearTextУказание того, что в начале редактирования свойства должен сбрасываться текущий текстДополненный логический литералFALSETRUE
FALSE
notSelectAllУказание того, что в начале редактирования весь текст не выделяетсяДополненный логический литералFALSETRUE
FALSE
askConfirmУказание того, что при попытке редактирования свойства (выполнении действия) будет выполнен запрос на подтверждениеДополненный логический литералFALSETRUE
FALSE
askConfirmMessageТекст вопроса о подтверждении редактирования свойства (выполнении редактирования)Строковый литералсообщение по умолчанию'Вы действительно хотите изменить это свойство?'
toolTipПодсказка, которая будет показываться при наведении пользователем мышки на заголовок свойства или действияСтроковый литералtoolTip по умолчанию'Подсказка'
notNullУказание того, что в случае NULL значения свойства, компонент этого свойства должен быть подсвеченДополненный логический литералnotNull свойстваTRUE
FALSE

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

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

Свойства таблицы

Имя свойстваОписаниеВид значенияЗначение по умолчаниюПримеры
autosizetodoЛогический литералFALSETRUE
FALSE
boxedРисование рамки вокруг компонентаЛогический литералFALSETRUE
FALSE
tabVerticalУказание того, что переход фокуса между ячейками будет осуществляться сверху вниз, а не слева направоДополненный логический литералFALSETRUE
FALSE
quickSearchУказание того, что в таблице будет осуществляться быстрый поиск элементаFALSETRUE
FALSE
headerHeightВысота заголовка в пикселяхЦелочисленный литералNULL60
resizeOverflowtodoЛогический литералFALSETRUE
FALSE
lineWidthtodoЦелочисленный литералNULL60
lineHeighttodoЦелочисленный литералNULL60

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

Имя свойстваДействует дляОписаниеВид значенияЗначение по умолчаниюПримеры
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;
}

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