Skip to end of metadata
Go to start of metadata

Инструкция 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Литерал типа NUMERIC0

1.5

noSort Запрет сортировкиЛогический литералFALSE

TRUE, FALSE

defaultCompareФильтр по умолчанию. Допустимые значения: EQUALS, GREATER, LESS, GREATER_EQUALS, LESS_EQUALS, NOT_EQUALS, START_WITH, CONTAINS, ENDS_WITH, LIKE.Строковый литералCONTAINS

START_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Заголовок свойства или действияСтроковый литералcaption свойства или действия'Заголовок'
askConfirmУказание того, что при попытке редактирования свойства (выполнении действия) будет выполнен запрос на подтверждениеДополненный логический литералFALSETRUE, FALSE
askConfirmMessageТекст вопроса о подтверждении редактирования свойства (выполнении редактирования)Строковый литералсообщение по умолчанию'Вы действительно хотите изменить это свойство?'
autoSizeАвтоматическое определение размера для компонента. Применяется только для текстовых компонентовДополненный логический литералFALSETRUE, FALSE
valueWidthШирина ячейки значения свойства в пикселях Целочисленный литералзависит от свойства100
charWidthШирина ячейки значения свойства в символахЦелочисленный литералзависит от свойства10
charHeightВысота ячейки значения свойства в символах (рядах).Целочисленный литералзависит от свойства2, 3
clearTextУказание того, что в начале редактирования свойства должен сбрасываться текущий текстДополненный логический литералFALSETRUE, FALSE
echoSymbolsУказание того, что вместо значения свойства будет показываться набор символов '*'. Используется, например, для паролейДополненный логический литералFALSETRUE, FALSE
changeKey

Клавиша, при нажатии которой будет начато редактирование свойства. Принцип задания аналогичен заданию параметра в Keystroke.getKeystroke(String)

Строковый литералNULL'ctrl F6', 'BACK_SPACE', 'alt shift X'
showChangeKeyУказание того, что в заголовок свойства будет включено название сочетания клавиш, по которому будет начато редактированиеДополненный логический литералTRUETRUE, FALSE
editOnSingleClickУказание того, что при однократном нажатии мышкой на компонент свойства, необходимо начинать редактированиеДополненный логический литералзависит от свойстваTRUE, FALSE
focusableУказание того, что компонент свойства (действия) или колонка в таблице могут владеть фокусомДополненный логический литералchangeKey = NULLTRUE, FALSE
captionFontШрифт, который будет использоваться для отображения заголовка свойстваСтроковый литералзависит от компонента'Tahoma bold italic 16', 'Times 12'
hideУказание того, что компонент свойства (действия) должен быть всегда спрятанДополненный логический литералFALSETRUE, FALSE
imagePathПуть к файлу с картинкой, которая будет отображаться в качестве иконки действия. Путь указывается относительно каталога imagesСтроковый литералNULL'image.png', 'pring.png' 
maxValueМаксимальное числовое значение, которое позволяет ввести компонент свойстваЦелочисленный литералNULL1000000, 5000000000L
notNullУказание того, что в случае NULL значения свойства, компонент этого свойства должен быть подсвеченДополненный логический литералnotNull свойстваTRUE, FALSE
panelCaptionAboveУказание того, что в панели необходимо рисовать заголовок компонента свойства или действия сверху от значенияДополненный логический литерал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

componentName

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

formPropertyName 

Имя свойства / действия на форме.

filterGroupName

Имя группы фильтровПростой идентификатор.

propertyGroupSelector

Имя группы свойств / действийПростой идентификатор.

groupObjectSelector

Имя группы объектов на формеПростой идентификатор.

treeSelector

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

noGroupObjectTreeContainerType

Тип контейнера формы:

  • BOX - общий контейнер формы
  • PANEL - содержит компоненты свойств, которые отображаются в панель (PANEL), и для которых группа отображения не определена.
  • TOOLBARBOX - общий контейнер тулбара.
  • TOOLBARLEFT - левая часть тулбара
  • TOOLBARRIGHT - правая часть тулбара
  • TOOLBAR - содержит компоненты свойств, которые отображаются в тулбар (TOOLBAR), и для которых группа отображения не определена.

groupObjectTreeContainerType

Тип контейнера группы объектов / дерева:

  • Все типы контейнера формы noGroupObjectTreeContainerType (семантика аналогична).
  • GRIDBOX - контейнер таблицы
  • GRID - компонент таблицы
  • TOOLBARSYSTEM - системный тулбар (количество записей, групповая корректировка и т.п.).
  • FILTERGROUPS - содержит компоненты групп фильтров
  • USERFILTER - компонет, который отображает пользовательские фильтры

 Примеры

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 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)) { // переносим свойство номер заказа
                        charWidth = 5; // ставим, что пользователю желательно должно показываться 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 {
    REMOVE TOOLBARLEFT; // убираем из иерархии контейнер с кнопками печати и экспорта в xls, тем самым делая их невидимыми
}

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

  • No labels