2. Компоненты выборки¶
2.1. Фреймы¶
2.1.1. Диаграмма Гантта¶
2.1.1.1. Общие положения¶
Класс фрейма TbtkLookUpGanttTreeFrame
Диаграмма Гантта, графически представляет календарный план проекта в виде набора параллельных и последовательных задач, выполняемых с привлечением различных ресурсов — исполнителей, материалов, инструментов.
На диаграмме Гантта задачи, составляющие план проекта, изображаются на шкале времени в виде отрезков, начало и конец которых соответствуют планируемым датам начала и окончания выполнения задач. Каждая задача располагается в отдельной строке. Задачи, связанные условием последовательного выполнения, соединяют стрелками
В системе Глобал диаграммы Гантта реализованы в виде фрейма TbtkLookUpGanttTreeFrame. Фрейм содержит дерево, к которому подключен компонент “диаграмма Гантта”. Рабочая область диаграммы отображает в графическом виде данные, содержащиеся в дереве. Данные отображаются в виде цветных элементов, на строках, расположенных напротив соответствующих узлов дерева.
Дерево должно быть полностью прогружаемым.

Пример Диаграммы Гантта
2.1.1.2. Правила построения диаграммы Гантта¶
Существует два режима определения элементов диаграммы Гантта:
- Данные, отображаемые в виде элементов, содержаться в отдельных атрибутах дерева. В этом случае, одному узлу (строчке в дереве) может соответствовать только один элемент диаграммы.
- Данные об элементах узла содержатся в одном атрибуте в виде строки с разделителями. В этом случае, узлу могут соответствовать несколько элементов диаграммы.
Переключение между режимами определения элементов осуществляется свойством фрейма “Элементы узла хранятся в одном атрибуте” (Gantt.Style)
2.1.1.2.1. Общие правила построения диаграммы Гантта (вне зависимости от режима определения элементов)¶
При отсутствии или неправильном указании обязательных атрибутов в свойствах фрейма будет выдана ошибка.
Для отображения элемента диаграммы должны быть заданы: дата начала и дата окончания. Параметры: цвет и стиль элемента не являются обязательными, если они не были указаны, будут использованы значения по умолчанию.
После открытия фрейма с диаграммой, производится масштабирование временного интервала диаграммы, таким образом, что бы все элементы диаграммы были видны на экране.
Если узел дерева не содержит элементов, но при этом узел имеет подчинённые узлы, у которых имеются элементы, такой узел будет содержать элементы всех подчинённых строк. При этом, цвета элементов будут совпадать с цветами элементов в подчинённых узлах, а стиль элемента будет взят из атрибута, указанного в свойстве “Атрибут типа элемента”.
Цвет должен быть указан в формате RGB, в 16-тиричной системе.
Пример¶FF0000 - синий FF00 - зелёный FF – красный
Возможные значения стилей элементов:
gisPipe: Прямоугольный элемент с заливкой указанного цвета с небольшим градиентом. gisLine: Линия. gisLineWEnd: Линия, ограниченная с обоих концов вертикальными линиями. gisSpan: Диапазон (линия со стрелками на концах, направленными вниз) gisSquare: Прямоугольник с чёрными границами и заливкой указанного цвета gisCircle: Круг, положение которого на диаграмме зависит только от StartDate gisRectangle: Прямоугольник, положение которого на диаграмме зависит только от StartDate gisDiamond: Ромб, положение которого на диаграмме зависит только от StartDate
2.1.1.3. Свойства фрейма TbtkLookUpGanttTreeFrame:¶
- Gantt.ItemIDFieldName
Атрибут идентификатора элемента
Свойство указывает на атрибут, содержащий цвет элемента диаграммы
- Gantt.BeginDateFieldName
Атрибут даты начала
Свойство указывает на атрибут, содержащий дату начала процесса, отображаемого в виде элемента диаграммы.
- Gantt.EndDateFieldName
Атрибут даты окончания
Свойство указывает на атрибут, содержащий дату окончания процесса, отображаемого в виде элемента диаграммы.
- Gantt.ItemStyleFieldName
Атрибут типа элемента
Свойство указывает на атрибут, содержащий стиль элемента диаграммы. Возможные значения стилей элементов:
gisPipe: Прямоугольный элемент с заливкой указанного цвета с небольшим градиентом. gisLine: Линия. gisLineWEnd: Линия, ограниченная с обоих концов вертикальными линиями. gisSpan: Диапазон (линия со стрелками на концах, направленными вниз) gisSquare: Прямоугольник с чёрными границами и заливкой указанного цвета gisCircle: Круг, положение которого на диаграмме зависит только от StartDate gisRectangle: Прямоугольник, положение которого на диаграмме зависит только от StartDate gisDiamond: Ромб, положение которого на диаграмме зависит только от StartDate - Gantt.ItemColorFieldName
Атрибут цвета элемента
Свойство указывает на атрибут, содержащий цвет элемента диаграммы Цвет должен быть указан в формате RGB, в 16-ричной системе.
Пример¶FF0000 - синий FF00 - зелёный FF - красный
В запросе значение цвета из строки (в 16-тиричном представлении) в число можно преобразовать следующим образом:
select utl_raw.CAST_TO_BINARY_INTEGER('80') as nColor from dual
- Gantt.ProgressFieldName
Атрибут со значением прогресса
Свойство содержит системное имя атрибута, в котором хранится значение “прогресса” (степени выполнения задачи или процесса). “Прогресс” измеряется в процентах от 0 до 100. На графике “прогресс” отображается в виде полоски настраиваемой ширины на элементе, обозначающем соответствующую задачу или процесс. Если прогресс не указан или имеет отрицательную величину, значок прогресса не отображается.
(Свойство не обязательное)
Note
Отображение прогресса в виде полосы было введено в Global 5.3.4. В предыдущих версиях прогресс отображается в виде небольшого ромбика на элементе диаграммы.
- Gantt.ItemParamsFieldName
Атрибут с параметрами элемента
Свойство содержит системное имя атрибута, в котором хранятся дополнительные параметры элемента диаграммы Гантта. Дополнительными параметрами являются, выравнивания теста, шрифт текста элемента и др. Параметры элемента указываются в виде строки с разделителями. Строка должна иметь следующий формат:
{Параметр}={значение};{Параметр}={значение}
Значения параметров элемента разделены точкой с запятой ”;”
В таблице указаны все возможные параметры элементов и их возможные значения. Системные имена параметров имеют полный и краткий формат, они указаны в столбцах «Полное имя» и «краткое имя» соответственно. Краткий формат записи системного имени параметра может использоваться для сокращения длинны строки.
Список допустимых параметров смотрите ниже, в описании свойства “Атрибут с параметрами элементов”.
- Gantt.CopyNodesToParent
Отображать элементы подчинённых узлов
Если узел не имеет собственных элементов, но обладает подчинёнными узлами, по умолчанию, элементы из подчинённых узлов копируются в текущий узел. Данное свойство позволяет изменить это поведение. Если флаг снят, элементы подчинённых узлов не будут копироваться в текущий.
- Gantt.LinkFieldName
Атрибут с параметрами связей между элементами
Свойство указывает на атрибут, содержащий параметры связей между элементами диаграммы в виде строки. Связью называется стрелка, соединяющая 2 элемента диаграммы Гантта.
Строка свойства может иметь два формата, новый и старый.
Старый формат:
SourceID;DestID;LinkType|SourceID;DestID;LinkType
где:
- SourceID - идентификатор элемента, из которого выходит стрелка
- DestID - идентификатор элемента, к которому приходит стрелка
- LinkType – тип стрелки. Возможные значения:
- asEndBegin - конец-начало,
- asBeginBegin - начало-начало,
- asEndEnd - конец-конец,
- asBeginEnd - начало-конец.
Значения параметров разделены точкой с запятой ”;”
Элементы разделены вертикальной чертой “|”
Пример¶1212322001;1212324001;asBeginBegin|1212323001;1212325001;asBeginEnd
Тип связи указывать не обязательно, т.е. допустима строка:
1212322001;1212324001\|1212323001;1212325001
в этом случае, будет считаться, что связь имеет тип asEndBegin
Новый формат:
{Параметр}={значение};{Параметр}={значение}|{Параметр}={значение};{Параметр}={значение}.
Поддерживаются следующие параметры:
FromID (сокр. FROM) - идентификатор элемента, от которого начинается линия
ToID (сокр. TO) - идентификатор элемента, к которого приходит линия
Direction (сокр. D) - направление. Значения:
- asEndBegin (по умолчанияю)
- asBeginBegin
- asEndEnd
- asBeginEnd
Style (сокр. S) - стиль. Значения:
- psSolid - сплошная линия
- psDash - линия состоящая из серии коротких линий (черточек).
- psDot - линия образуется из серии точек.
- psDashDot - линия образуется чередованием черточек и точек.
- psDashDotDot - линия состоит из чередования черточек и пар точек.
- psClear - линия не рисуется.
Все стили кроме psSolid и psClear работают только если толщина не превышает 1 пиксель.
Thickness (сокр. T)- толщина (по умолчанию 1px).
Color (сокр. С) - цвет линии (по умолчанимю черный(CLBlack)). Цвет можно задавать как в шестнадцатиричном виде $000000(черный), так и с использованием констант (ClBlack, ClWhite, ClRed, ClYellow, ClGreen, ClBlue и др.)
Параметры на равне с полным именем, имеют равноправные сокращенные, которыми так же можно пользоваться при задание строки параметров.
Значение атрибута должно содержать связи, которые начинаются от элементов, находящихся в текущем узле. В каком узле находится элемент, у которого связь оканчивается, значения не имеет.
- Gantt.Style
Элементы узла хранятся в одном атрибуте
Флаг указывает, что информация об элементах диаграммы Гантта хранится в атрибуте, указанном в свойстве “Атрибут с параметрами элементов” (Gantt.ItemsDataFieldName), в виде строки с разделителями.
При указанном флаге, свойства: “Атрибут идентификатора элемента”, “Атрибут даты начала”, “Атрибут даты окончания” и “Атрибут цвета элемента” не имеют значения, поскольку вся информация об элементах хранится в атрибуте, указанном в свойстве “Атрибут с параметрами элементов”. Значения, содержащиеся в атрибуте, указанном в свойстве “Атрибут типа элемента”, используются узлами, содержащими элементы подчинённых узлов (см. Общие правила построения диаграмм Гантта, п. 4).
- Gantt.ItemsDataFieldName
Атрибут с параметрами элементов
Свойство указывает на атрибут, содержащий все параметры элементов диаграммы, принадлежащих текущему узлу, в строке с разделителями. Указание свойства имеет смысл при выставленном флаге “Элементы узла хранятся в одном атрибуте”.
Строка должна иметь следующий формат:
{Параметр}={значение};{Параметр}={значение}|{Параметр}={значение};{Параметр}={значение}
Значения параметров элемента разделены точкой с запятой ”;”
Элементы разделены вертикальной чертой “|”
В таблице указаны все возможные параметры элементов и их возможные значения. Системные имена параметров имеют полный и краткий формат, они указаны в столбцах «Полное имя» и «краткое имя» соответственно. Краткий формат записи системного имени параметра может использоваться для сокращения длинны строки при очень большом количестве параметров, или большом количестве элементов в одном узле.
- Gantt.DrawLines
Разлиновка
Свойство позволяет отключить раскрашивание диаграммы ганта чередующимися линиями разного цвета в соответствие записям дерева. По умолчанию свойство в значение true - разлиновка включена.
- Gantt.EnableMoving
Возможность перемещения элементов с помощью мыши
Управление возможностью перемещения элементов использую мышь. По умолчанию значение false – запрещено.
- Gantt.EnableResizing
Возможность изменения размеров элементов
Управление возможностью изменения размеров элементов использую мышь. По умолчанию значение false – запрещено.
- Gantt.DrawingItemsConstraint
Свойство позволяет отключить отображние на диаграмме ограничения месторасположения элементов
Свойство позволяет отключить отображние на диаграмме ограничения месторасположения элементов.
- Gantt.EnableMenuOnLinkCreate
Отображать меню выбора направления при создании связи
Свойство позволяет отключить всплывание меню перед вызовом OnlinkCreate при создании связи между элементами диаграммы Ганта используя мышь.
Полное имя Краткое имя Описание ID ID Идентификатор элемента StartDate (Обязательный) STD Дата начала процесса в формате dd.mm.yyyy или dd.mm.yyyy hh:mm:ss StopDate (Обязательный) SPD Дата окончания процесса в формате dd.mm.yyyy или dd.mm.yyyy hh:mm:ss Style ST Стиль элемента. Определяет форму элемента на диаграмме:
gisPipe - Прямоугольный элемент с заливкой указанного цвета с небольшим градиентом.
gisLine - Линия.
gisLineWEnd - Линия, ограниченная с обоих концов вертикальными линиями.
gisSpan - Диапазон (линия со стрелками на концах, направленными вниз)
gisSquare - Прямоугольник с чёрными границами и заливкой указанного цвета
Color CO Цвет элемента. Цвет должен быть указан в формате RGB, в 16-тиричной системе (не забывайте ставить значок $ перед значением).
$FF0000 - синий
$FF00 - зелёный
$FF - красный
Progress P Определяет степень выполнения задачи от 0 до 100. Если прогресс не задан или отрицателен, индикатор прогресса не отрисовывается. (по умолчанию: -1) ProgressColor PC Цвет, которым будет закрашен индикатор прогресса выполнения задачи (ромб или линия). Цвет должен быть указан в формате RGB, в 16-тиричной системе (не забывайте ставить значок $ перед значением).
$FF0000 - синий
$FF00 - зелёный
$FF – красный (по умолчанию)
ProgressWidth PW Ширина полоски прогресса выполнения задачи. Указывается в процентах от ширины элемента диаграммы. Не учитывается для элементов диаграммы типа gisLine, gisLineWEnd, gisSpan. Hint H Текст всплывающей подсказки, отображаемой при наведении курсора мыши на элемент. Caption C Текст элемента, отображаемый на диаграмме. CaptionPos CP Положение текста элемента, относительно элемента.
cpLeft – слева от элемента
cpInside – на элементе (по умолчанию)
cpRight – справа от элемента
CaptionCrop CC Флаг, указывающий, что текст элемента не должен выходить за границы элемента. Флаг имеет смысл, только при расположении текста на элементе.
True – обрезать текст
False – не обрезать текст (в этом случае текст может быть длиннее самого элемента) (по умолчанию)
CaptionAlignment CA Выравнивание текста элемента. Флаг имеет смысл, только при расположении текста на элементе.
taLeftJustify – выравнивание по левому краю элемента
taCenter – выравнивание по центру (по умолчанию)
taRightJustify - выравнивание по правому краю элемента
CaptionVertAlignment CVA Выравнивание текста элемента по вертикальной оси.
taTopJustify – по верхнему краю
taBottomJustify – по нижнему краю
taVCenter – по центру (по умолчанию)
FontName FN Системное имя, шрифта FontStyle FS Стиль шрифта:
fsBold - жирный
fsItalic - наклонный
fsUnderLine - подчёркнутый
fsStrikeOut - зачёркнутый
Значение параметра может содержать любые комбинации возможных значений, разделённые запятой.
Пример: FontStyle=fsBold,fsItalic,fsUnderLine
FontSize FSZ Размер шрифта (по умолчанию: 10) FontColor FC Цвет шрифта (по умолчанию: Чёрный) Width W Ширина элемента. Ширина задается пропорционально высоте, и диапозон значния не ограничен. Т.е. значение ширины в 200% задает ширину равную 2*Height(pixel). Ширину следует задавать элементам, расположение которых зависит только от параметра StartDate(прямоугольни и ромб). Если высота равна 100%, то установка значения параметра в 200%, задаст ширину в два раза больше высоты строки, т.к. высота равная 100% соответствует высоте строки. Height HT Высота элемента в процентах. Максимальная высота 100%, равная высоте строки, минимальная 10%.. Center CR Задает центр фигуры в процентах(0-100%), т.е. центру строки соответствует значение 50.%. Тем самым использование данного параметра с параметром Height позволяет расположить несколько элементов на одной линии без их взаимного перекрытия. MovingEnable: boolean ME Позволяет запретить перемещать элемент используя манипулятор типа “мышь”. Пример:ME=0; ResizingEnable: boolean RE Позволяет запретить изменять размеры элемента используя манипулятор типа “мышь”. Пример:RE=0; StartDateLimit:TDateTime [1] STL Ограничение на минимальное значение положения левой границы элемента графика ганта( левая граница изменения размера или перемещения элемента). Пример: STL=4.04.2009 11:45:00 StopDateLimit:TDateTime [1] SPL Ограничение на максимальное значение положения правой границы элемента графика ганта(правая граница изменения размера или перемещения элемента). ). Пример: SPL=12.04.2009 11:45:00 Пример¶ID=1215170001; Std=13.11.2006; StopDate=14.11.2006; Style=gisPipe; Color=$008000; Progress=0; ProgressColor=$800000; ProgressWidth=50; Caption=Субпроцесс № 1-3-1; CaptionPos=cpInside; CaptionAlignment=taRightJustify; CVAt=taVCenter; CaptionCrop=True; FontName=Arial; FontStyle=; FontSize=8; FontColor=$0000FF; Hint=Всплывающая подсказка для элемента Субпроцесс № 1-3-1|ID=1212324001; Std=03.11.2006; StopDate=04.11.2006; Style=gisPipe; Color=$008000; Progress=0; ProgressColor=$800000; Caption=Субпроцесс № 1-3-1; CaptionPos=cpInside; CaptionAlignment=taRightJustify; CVAt=taVCenter; CaptionCrop=True; FontName=Arial; FontStyle=; FontSize=8; FontColor=$0000FF; Hint=Всплывающа подсказка для элемента Субпроцесс № 1-3-1|ID=1215170001; Std=10.11.2006; StopDate=14.11.2006; Style=gisCircle; Color=$0080EE; CaptionPos=cpInside; CaptionAlignment=taRightJustify; CVAt=taVCenter; CaptionCrop=True; FontName=Arial; FontStyle=; FontSize=8; FontColor=$0000FF; Hint=Всплывающая подсказка для элемента; CR=50; HT=70;
Пример параметров, которые задают два процесса в одной линии:¶ID=1215170001; Std=10.11.2006; StopDate=14.11.2006; Style= gisPipe; Color=$008000; Progress=0; ProgressColor=$800000; Caption=Субпроцесс № 1-3-1; CaptionPos=cpInside; CaptionAlignment=taRightJustify; CVAt=taVCenter; CaptionCrop=True; FontName=Arial; FontStyle=; FontSize=8; FontColor=$0000FF; Hint=Всплывающа подсказка для элемента; Center=25; Height=50; |ID=1215170002; Std=12.11.2006; StopDate=16.11.2006; Style=gisPipe; Color=$FF8E00; Progress=0;ProgressColor=$80046D;Caption=Субпроцесс № 1-3-1; CaptionPos=cpInside; CaptionAlignment=taRightJustify; CVAt=taVCenter; CaptionCrop=True; FontName=Arial; FontStyle=;FontSize=8; FontColor=$0000FF; Hint=Всплывающа подсказка для элемента; Center=75;Height=50;
Так же, поддерживается устаревший формат строки для задания элементов. Не рекомендуется его использовать, поскольку формат оставлен для совместимости.
Строка должна иметь следующий формат:
ID;BeginDate;EndDate;Style;Color;Caption;FontColor|ID;BeginDate;EndDate;Style;Color;Caption;FontColor
где:
- ID - идентификатор элемента
- BeginDate - дата начала
- EndDate - дата окончания
- Style - тип элемента
- Color - цвет элемента
- Caption – текст элемента
- FontColor – цвет текста элемента
Значения параметров элемента разделены точкой с запятой ”;”
Элементы разделены вертикальной чертой “|”
Первые три параметра обязательны, цвет и тип могут быть не заданы.
Даты должны быть указаны в формате “dd.mm.yyyy hh:mm:ss”
Цвет должен быть указан в формате RGB, в 16-тиричной системе (не забывайте ставить значок $ перед значением):
$FF0000 - синий $FF00 - зелёный $FF - красный
Пример¶1212319001; 01.11.2006 12:11:00;02.11.2006 12:11:00; gisLineWEnd; $8000; Текст; $FF |1212390001; 05.11.2006 12:11:00; 06.11.2006 12:11:00; gisLineWEnd; $8000; Текст2; $FF
- Gantt.WeekdaysMode
Режим отображения дней недели
Свойство регулирует то как будут отображаться дни недели на таймлайне Диаграммы Ганта. Свойство может принимать следующие значения:
- wdmShort - Всегда использовать сокращения. Это значение используется по умолчанию.
- wdmAuto - Использовать полные наименования, сокращать если не достаточно доступного места.
2.1.1.4. Примеры запросов и методов:¶
В примере используется класс с коллекцией. Класс содержит данные с древовидной структурой, в коллекции хранятся даты начала и окончания процессов.
select
t.*,
Decode(bisRoot, 1, utl_raw.CAST_TO_BINARY_INTEGER('80'),
Decode(bHasChild, 0, utl_raw.CAST_TO_BINARY_INTEGER('8000'),
utl_raw.CAST_TO_BINARY_INTEGER('800000'))) as nItemColor,
Decode(bisRoot, 1, 'gisPipe', Decode(bHasChild, 0, 'gisLineWEnd', 'gisSpan')) as sItemStyle
from (
select
t.ID,
t.idParent, GanttExtAPI.GetidParent_HL(t.idParent) as idParent_HL,
t.sCAPTION,
t.idClass,
gc.id as idItem,
gc.dDateBegin,
gc.dDateEnd,
GanttextcollectAPI.GetLinks(gc.id) sLinks,
(Select nvl(max(1),0)
from GanttExt
where idParent = t.id) bHasChild,
Decode(t.idParent, null, 1, 0) bisRoot,
‘Текст’ as sItemText
from GanttExt t, Ganttextcollect gc
where t.id = gc.IDGanttExt(+)
) t
select
t.*,
Decode(bisRoot, 1, utl_raw.CAST_TO_BINARY_INTEGER('80'),
Decode(bHasChild, 0, utl_raw.CAST_TO_BINARY_INTEGER('8000'),
utl_raw.CAST_TO_BINARY_INTEGER('800000'))) as nItemColor,
Decode(bisRoot, 1, 'gisPipe', Decode(bHasChild, 0, 'gisLineWEnd', 'gisSpan')) as sItemStyle,
GanttextcollectAPI.GetItemsAsString(t.id, bisRoot, bHasChild) sItemsData
from (
select
t.ID,
t.idParent, GanttExtAPI.GetidParent_HL(t.idParent) as idParent_HL,
t.sCAPTION,
t.idClass,
''as sLinks'',
(Select
nvl(max(1),0)
from GanttExt
where idParent = t.id) bHasChild,
Decode(t.idParent, null, 1, 0) bisRoot
from GanttExt t
) t
static function GetItemsAsString(idpLine in number, bpHasChild in number, bpIsRoot in number) return varchar2 as
res varchar2 (4000);
tempRes varchar2 (4000);
begin
res :=;
*for cr in
(select gc.* from ganttextcollect gc
where gc.IDGanttExt = idpLine)
loop
tempRes := to\_char(cr.id) || ';' || to_char(cr.ddatebegin, 'dd.mm.yyyy hh:mm:ss') || ';' || to_char(cr.ddateend, 'dd.mm.yyyy hh:mm:ss');
if bpisRoot = 1 then
tempRes := tempRes || '; gisPipe;$8000';
else
beginif bpHasChild = 0 then
tempRes := tempRes || ';gisLineWEnd;$80*';
else
tempRes := tempRes || ';gisSpan;$800000';
end if;
end;
end if;
tempRes := tempRes || ';Текст';
if res is null then
res := tempRes;
else res := res || ' | ' ||tempRes;
end if;
end loop;
return res;
end;
static function GetLinks(idpSelf in number) return varchar2 as
res varchar2 (4000);
begin
if idpSelf is not null then
res := to_char(idpSelf)|| ';' || '1212324001'; /*для примера здесь прописан идентификатор объекта, в реальном случае здесь будет более сложная логика*/
else
res := ;
end if;
end;
2.1.1.5. Контекстные операции и переменные¶
2.1.1.5.1. События диаграммы Гантта¶
При клике на элементе диаграммы Гантта, границы этого элемента обводятся синим, происходит фокусировка на соответствующий узел в дереве, после чего отрабатывает операция дерева OnFocusedItemChanged (если она существует). Перед фокусировкой на узел дерева переменной выборки IDFocusedItem# присваивается значение идентификатора выделенного элемента. Значение этого параметра доступно как в CWA дерева, выполняемого после фокусировки, так и в операции OnFocusedItemChanged.
При клике в пустое пространство или на элементе, который был скопирован из подчинённой линии, фокусировка в дереве не производится, в переменную IDFocusedItem# записывается значение Null, операция OnFocusedItemChanged отрабатывает.
Выделение возможно только для «первичных» элементов. Элементы, которые были скопированы в линию от подчинённых линий, выделить не возможно.
При двойном клике на элементе диаграммы выполняется первая операция контекстного (выпадающего) меню, или операция OnDoubleClick, если она существует.
2.1.1.5.2. Создание выпадающего меню¶
Для добавления операций в выпадающее меню диаграммы Гантта, необходимо создать в выборке дерева операцию GanttPopupMenu. Операции, находящиеся под этой операцией, будут добавлены в выпадающее меню диаграммы Гантта, отображаемое при клике правой кнопкой мыши на «первичном» элементе диаграммы.
2.1.1.5.3. Оформление Диаграммы Ганта в стилях темы интерфейса¶
Начиная с Global 1.5 в Диграмме Ганта реализована поддержка тем интерфейса.

Внешний вид Диаграммы Ганта с поддержкой тем интерфейса и без
[1] | (1, 2) Диапозон между StartDateLimit и StopDateLimit визуально отрисовывается пунктирной линией для каждого элемента. Видимостью диапозона управляет свойство фрейма “Gantt.DrawingItemsConstraint”. Для запрета отрисоки необходимо свойство сбросить в значение false. |
2.1.2. Список и древовидный список¶
Классы фреймов:
- TbtkLookUpGridFrame
- TbtkLookUpGridTabFrame
- TbtkLookUpGridTabDynamicFrame
- TbtkLookUpGridTabDynDetFrame
- TbtkLookupTreeFrame
- TbtkLookupTreeTabDynamicFrame
- TbtkLookupTreeTabDynDetFrame
- TbtkLookupTreeTabFrame
2.1.2.1. Экспорт из списочных фреймов¶
Актуально для версии клиента > 5.3 В 4.30 в дереве нет возможности число вывести в эксель в числовом формате из редактора etEdit.
Через пункт меню “Сохранить как...”
- Документ Excel (*.xls; *.xlsx).
Экспорт средствами DevExpress.
Числовое поле при редакторах etEdit, etLookUP, etButtonsEdit определяется по наличаю маски ввода либо форматы отображения(только для древовидного списка, для простого табличного списка, достаточно того, что бы тип данных поля был числовой). В случае наличия маски происходит преобразование к Variant. Какой тип такой формат и будет у ячейки. В случае формата отображения, Excel проставляется формат отображения.
Делфи формат отображение не эквивалентен Excel формату отображения (статья на сайте msoffice). Компоненты пытаются наиболее близко сконвертить формат отображения делфи в формат отображения Excel.
- Документ Excel без форматирования (*.xlsx).
Экспорт нашими средствами.
Отличительной чертой является автоматическая установка формата ячеек Excel, соответствующего типу данных атрибутов списка. Например, столбцы с типом редактора “Денежный” сохраняются в Excel как числа с 2-мя знаками после запятой. Числовые столбцы сохраняются как числа со стандартным представлением Excel. Это дает возможность использовать значения экспортированных ячеек в формулах Excel. Реализованный экспорт без форматирования поддерживает заголовки столбцов, но не работает с бандами.
Возможность формирования XLSX- и XLSM- отчетов, содержищих до 1 млн. строк и 16 тыс. столбцов на каждой закладке
Дополнительные пункты древовидного списка
- Документ Excel c группировкой строк (*.xlsx).
Дерево формируется не отступами с помощью пустых ячееек как в Девэкспресс, а группировкой строк Excel.
В начале строятся стандартными средствами DevExpress, а следом наша пост обработка заменяет ведущие пустые ячейки на отступы первых ячеек строк.
2.1.2.2. Транспонированный список¶
2.1.2.2.1. Настройка транспонированного грида¶
2.1.2.2.1.1. Общие положения¶
Любой Grid-фрейм начиная с клиентской версии 1.4.18.28 поддерживает возможность построения грида не напрямую от выборки, а динамически – по отдельно выполняемым запросам, возвращающим перечень столбцов, строк грида, и непосредственно данных.
Под каждый запрос необходимо наличие отдельной выборки (или отдельных отображений выборки).
Выборка данных возвращает перечень записей, данные из которых будут размещены в транспонированном гриде. Привязка данных к конкретным строкам и столбцам транспонированного грида осуществляется при помощи ключевых полей в выборке данных и выборках строк и столбцов. Кроме того, в связи с возникающей необходимостью вынесения нескольких атрибутов выборки данных в отдельные столбцы транспонированного грида, имеется возможность привязки конкретного столбца выборки данных к конкретному столбцу транспонированного грида. Таким образом, привязка данных к столбцам транспонированного грида осуществляется по двойному соответствию: совпадению значений ключевых полей и имени столбца выборки данных со значением дополнительного поля выборки столбцов.
В качестве ключевых полей нужно использовать поля с типом «строка».
Выборка столбцов называется также выборкой атрибутов, она возвращает перечень столбцов транспонированного грида. Для каждого столбца указывается его наименование, ключевой атрибут соответствия и имя столбца выборки данных, значение которого будет визуализировано в транспонированном гриде.
Порядок, в котором выборка столбцов возвращает данные, определяет порядок следования столбцов транспонированного грида.
Выборка строк возвращает перечень строк транспонированного грида в порядке их следования в транспонированном гриде. Часть столбцов выборки строк может быть выведена в качестве обычных, дополнительных столбцов транспонированного грида. Они будут идти первыми, перед столбцами, построенными динамически. В выборке строк должен иметься ключевой атрибут, по значениям которого будет осуществляться привязка строк с данными к конкретной строке транспонированного грида.
2.1.2.2.1.2. Настройка при помощи свойств¶
2.1.2.2.1.3. Общие настройки¶
Настраивается транспонированный грид на закладке «Транспонирование» карточки выборки.
Ключевым с точки зрения настройки является свойство «Транспонировать данные» (<фрейм>. TransposeDataSet). Оно должно быть включено.
2.1.2.2.1.4. Настройка свойств данных¶
В свойствах «Атрибут внешнего ключа для выборки атрибутов» (<фрейм>.TransposeDataSetAttrKey) и «Атрибут внешнего ключа для выборки строк» (<фрейм>.TransposeDataSetRowKey) указываются атрибуты в выборки данных, по значениям которых данные из этой выборки будет отнесены в соответствующую строку и столбец транспонированного грида.
В свойстве «Атрибуты с данными» (<фрейм>.TransposeDataSetValueAttr) указывается список атрибутов (через точку с запятой), которые будут транспонироватся.
В свойстве «Атрибуты со стилями раскраски данных» (<фрейм>.TransposeDataSetStyleAttr) указывается список атрибутов (через точку с запятой), в которых указывается стиль раскраски для соответствующего атрибута с данными. Порядок указания атрибутов раскраски соответствует порядку атрибутов с данными. Можно пропускать указание атрибута раскраски для атрибута с данными. Это свойство не обязательное.
В свойстве «Стили раскраски ячеек, для которых нет записей в выборке данных.» (<фрейм>.TransposeDataSet EmptyCellStyle) указывается список стилей раскраски (через точку с запятой) для ячеек в транспонированном гриде для которых нет записей в выборке данных. Это свойство не обязательное.
2.1.2.2.1.5. Настройка свойств столбцов¶
В свойстве «Выборка атрибутов» (<фрейм>. AttrSelection) указывается выборка и отображение, GST которых вернет перечень столбцов грида. Указание происходит в формате <Имя выборки>.<Имя отображения>.
В свойстве «Ключевой атрибут выборки атрибутов» (<фрейм>.AttrSelectionKeyAttr) необходимо указать атрибут выборки со списком атрибутов, в котором будет возвращено ключевое значение привязки записей в выборке данных к конкретному столбцу транспонированного грида.
В свойстве «Атрибут с именем показателя» (<фрейм>.AttrSelectionDataFieldAttr) указывается атрибут выборки со списком атрибутов, в значении которого будет указан столбец (имя столбца) выборки данных, который должен быть визуализирован в колонке транспонированного грида. Возможные имена столбцов, возвращаемые атрибутом, указанном в данном свойстве, должны присутствовать в подмножестве атрибутов показателей, заданных в свойстве «Атрибуты показателей» (<фрейм>.TransposeDataSetValueAttr)
В свойстве «Атрибут заголовков» (<фрейм>.AttrSelectionCaptionAttr) указывается атрибут выборки со списком атрибутов, в значении которого будет указан заголовок столбца. Для группировки столбцов используйте формат заголовка в виде <Заголовок столбца>|<Заголовок группы>.
В свойстве «Атрибут со стилем показателя» (<фрейм>.AttrSelection StyleAttr) указывается стиль раскраски для данного столбца. Раскраска ячейки имеет более высокий приоритет, чем этот стиль.
2.1.2.2.1.6. Настройка свойств строк¶
В свойстве «Выборка строк» (<фрейм>. RowSelection) указывается выборка и отображение, GST которых вернет перечень строк грида. Указание происходит в формате <Имя выборки>.<Имя отображения>.
В свойстве «Ключевой атрибут выборки строк» (<фрейм>. RowSelectionKeyAttr) необходимо указать атрибут выборки строк, в котором будет возвращено ключевое значение привязки записей в выборке данных к конкретной строке транспонированного грида.
2.1.2.2.1.7. Возможности редактирования, обновления и отладки¶
Все операции выполняются в контексте выборки данных. Выборки строк и столбцов можно найти используя функцию FindSelection.
При навигации по транспонированному гриду (мышкой или курсорными клавишами) происходит позиционирование во всех трех выборках: выборки данных, строк и атрибутов. Это позволяет пользоваться функцией GetVar для получения текуших значений атрибутов.
Существуют следующие возможности по выделению данных:
- выделение произвольной прямоугольной области при помощи мышки или курсорных клавиш + Shift;
- выделение целых строк данных при помоши мышки или курсорных клавиш (если выделение затрагивает столбцы из выборки строк) или клавиши Ins;
- выделение произвольных строк при помощи мышки + удерживание клавиши Ctrl;
- выделение всех строк при помощи Ctrl+A ;
Во всех случаях в выборке данных свойство SelectedRecords будет заполнено выбранными строками. Также в выборках строк и столбцов SelectedRecords будет содержать выделенных диапазон.
При редактировании ячейки грида будет происходить редактирование выборки данных для соответствующей строки и столбца. Если для такой комбинации строки и столбца нет данных в выборке данных, то произойдет вставка новой строки (в операции InsertItem нужно проставить все ключевые и обязательные поля для новой строки).
При обновлении выборки данных (Selection.Refresh) происходит обновление данных в транспонированном гриде. При обновлении выборки строк или выборки столбцов произойдет перестроение транспонированного грида (выборка данных не обновится). Есть специальный метод, позволяющий сразу обновлять данные, строки и столбцы в любой комбинации: Selection.RefreshTranspose (<Флаг обновления данных>, <Флаг обновления строк>, <Флаг обновления столбцов>).
Есть возможность частичного обновления выборки данных. Для этого нужно написать операцию, аналогичную GST, возвращающую нужные строки и вызвать метод Selection.Merge (<Имя операции>). Вызываемая операция должна быть аналогична GetSQLText выборки данных, и предназначена для возвращения набора данных, которые необходимо обновить в транспонированном гриде. При вызове Merge, грид выполнит этот запрос и обновит себя и соответствующие строки в выборке данных. Megre выполняется в контексте мастер выборки выборки данных. Для вызова в контексте выборки данных есть метод Selection .Merge2(<Имя операции>), полностью идентичный функционально методу Merge. Контекст влияет на подстановку значений параметрам SQL скрипта. Так как имя столбца в транспонированном гриде формируется динамически, то для получения поля нельзя использовать функцию FindField . Вместо этого используйте функцию TransposeFieldByKey(<значение ключа выборки атрибутов>, <имя поля>). Например, чтобы зафиксировать динамический столбец слева напишите:
<pascal>
F := Selection.TransposeFieldByKey(2, 'Value');
if Assigned(F) then
Selection.Controller.FixColumn(F.FieldName, True);
</pascal>
При смене активной ячейки будет выполняться операция с именем «OnFocusedCellChanged».
Для упрощения отладки в окне SelectionDebugWindow добавлена закладка «Транспонирование». На ней расположены закладки, на которые выводятся результаты всех 3-х запросов: данных, строк, столбцов. На 4-й закладке выводится результат операции Merge.
2.1.2.2.1.8. Ограничения¶
В текущей версии имеются ограничения в быстродействии при работе с большим количеством столбцов. Время работы грида DevExpress увеличивается в квадратичной зависимости при возрастании количества столбцов.
Таким образом, пока не следует осуществлять построения транспонированного грида при количестве столбцов, большем 400.
2.1.2.2.1.9. Пример¶
Создайте выборку с 3 представлениями: AttrList, RowList и Data.
select
1 as id,
'Столбец 1' as Caption,
'Value' as Data
from
dual
union select
2 as id,
'Столбец 2' as Caption,
'Value' as Data
from dual
union
select 3 as id,
'Столбец 3' as Caption,
'Value' as Data
from
dual
select
1 as id,
'Строка 1' as Caption
from
dual
union select
2 as id,
'Строка 2' as Caption
from
dual
union select
3 as id,
'Строка 3' as Caption
from
dual
select
1 as id,
2 as IdAttr,
2 as idRow,
5 as Value
from
dual
union select
2 as id,
3 as IdAttr,
3 as idRow,
6 as Value
from
dual
Заполните свойства на закладке «Транспонирование» в отображении Data согласно приведенному рисунку:

Откройте выборку в отображении Data. У Вас должен получится следующий грид:

2.1.3. OLE контейнер¶
2.1.3.1. Описание¶
Класс фрейма TbtkLookUpOleContainer.
Фрейм обладает собственной выборкой, тем не менее она не несет ни какой смысловой роли, кроме как произвольный источник даннных. Фрейм инкапсулирует Delphi компонент TOleContainer. Компонент ялвялется контейнером OLE объектов. В нем можно создать и отобразить экземпляр Microsoft Office Word, Excel.
Однако особенности ToleControl таковы, что фрейм удовлетворительно работает только если единолично расположен на MDI форме с режиме “только чтение”.
2.1.3.2. Использование в скрипторе¶
Доступ к компоненту TOleContainer можно получить через выборку в
скрипторе: InternalLibrary.TbtkScriptSelectionObject.OleContainer
Пример открытия файла Microsoft Word с помощью OleContainer:
Операция OnloadMeta¶<PASCAL> Selection.OleContainer.CreateObjectFromFile('C:\test.doc', False); </PASCAL>Операция OnShow¶<PASCAL> Selection.OleContainer.DoVerb(ovPrimary); // активируем оле объект Selection.OleContainer.OleObject.ActiveWindow.ActivePane.DisplayRulers := false; // скрываем Ribbon интерфейс у Word ev := 2; Selection.OleContainer.OleObject.Protect(ev); // режим "только чтение" </PASCAL>
2.1.4. OLAP фреймы¶
2.1.4.1. OLAP-таблица¶
Класс фрейма TbtkLookUpOlapFrame.
2.1.4.1.1. Механизм детализации¶
OLAP фрейм предоставляет возможность раширенной детализации (DrillDown).
Детализацию можно выполнить по двойному клику на ячейку. По двойному клику предоставляется две возможности:
- Выбрать поле из сводной таблице фактов, по которому и будет выполнена детализация. Детализируется активная запись. Окном детализации является новый OLAP фрейм. Новый OLAP фрейм может открываться в двух режимах: с копированием данных текущего OLAP фрейма в новую выборку либо использование текущей выборки. При использование текущая выборки нельзя закрыть мастер фрейм, пока не будут закрыты все фреймы детализации. При использовании копирования на больших объемах данных могут возникнуть проблемы с производительностью приложения. За режим открытия отвечает свойство фрейма “Копировать данные куба при детализации”. По умолчанию свойство установлено в состояние “Включено”.
- Открыть сводную таблицу таблицу фактов, по пункту “Перейти к фактическим данным...”. Двойным кликом на таблице фактов вызывается операция указанная в свойстве “Операция, выполняемая на двойной щелчок в таблице фактов” OLAP фрейма. В операции происходит открытие карточки объекта таблицы фактов. Если операция не указана, то будет попытка загрузить операцию “DefaultOLAPDblClickOper” из списка настраиваемых операций(Сервис->Настройка Действий->Настраиваемые операции). Пример операции смотреть ниже.
<sql>
<GetProp>
[out svModalType, svSelName, svSelRepresent]
begin
:svModalType := BTK_ClientGate.GetClassModalType(:idvClass);
:svSelName := BTK_ClientGate.GetClassProperty(:idvClass, :svPropSelName);
:svSelRepresent := BTK_ClientGate.GetClassProperty(:idvClass, :svPropRepresent);
end;
</GetProp>
</sql>
<PASCAL>
idvClass := GetVar('IdClass');
DebugMsg(idvClass);
// Получем Имя выборки и отображение карточки по Id класса
v := execsqlEx('GetProp', 'svModalType; svSelName; svSelRepresent; idvClass; svPropSelName; svPropRepresent', [ftString, ftString, ftString, ftFloat, ftString, ftString], ['', '', '', idvClass, 'CardEditor.Selection', 'CardEditor.Representation']);
DebugMsg(v[1] + '.' + v[2] + '.' + v[0]);
// Преобразвоание типа открытия карточки(Модально или MDI)
if UpperCase(v[0]) = UpperCase('fcfMDI') then
ModalType := fcfMDI
else
if UpperCase(v[0]) = UpperCase('fcfModal') then
ModalType := fcfModal;
// СОздание формы карточки
CreateFormEx('', v[1], ModalType, ['Representation', 'idItem#'],[v[2], GetVar('id')]);
</PASCAL>
2.1.4.1.2. Открытие карточки измерения¶
Кроме того, OLAP фрейм предоставляет возможность открыть карточку измерения. Открыть карточку активного измерения можно двойным кликом на измерении, либо через пункт всплывающее меню “Открыть карточку измерения...”. Карточку измерения можно будет открыть, если в записе с измерением возвращаемое SQL запросом присутсвуеют ID и IdClass измерения. Шаблон размещения идентификаторов в записе поля: “ИмяИзмерения|ID|IDClass”.
2.1.4.1.3. Дополнительная информация¶
- Сколько максимально измерений может быть в области данных? Это зависит от количества данных в измерениях. Количество членов в одном измерение (уникальных значений в измерение) не должно превышать 2^32. А перемножение всех членов всех измерений не должно превышать 2^64.
- Максимальное количество измерений должно быть не больше 32.
2.1.4.2. Pivot-таблица¶
Класс фрейма TbtkLookUpPivotGridFrameUnit.
2.1.4.2.1. Общее описание¶

Пример Pivot-таблицы
Pivot-таблица позволяет представлять многомерные отчеты по заданным параметрам.
Пример использования можно посмотреть на выборке SEL_TSG_PivotGrid в отображении PivotGrid.
2.1.4.2.2. Свойства фрейма¶
Настройки фрейма | Возможные значения | Описание |
---|---|---|
Отображение заголовков измерений строк | Область итогов снизу / Область итогов сверху / Древовидное, область итогов снизу | Свойство определяет порядок и способ группировки строк Pivot-грида. |
Отображение заголовков измерений столбцов | Область итогов слева / Область итогов справа | Свойство определяет порядок и способ группировки столбцов Pivot-грида. |
Для возможности динамического использования Pivot-грида в скриптовый язык добавлен класс TbtkScriptPivotGridObject, предоставляющий доступ к свойствам Pivot-грида.
Получить доступ к этому объекту можно через скриптовый метод выборки
InternalLibrary.TbtkScriptSelectionObject.PivotGrid
2.1.4.2.3. Управление конфигурацией и сохранение настроек¶
Pivot-грид поддерживает управление универсальной OLAP-структурой (см. OLAP-структура). Все функции по сохранению, восстановлению и управлению настройками конфигурации возлагаются на нее.
2.1.5. HTML фрейм¶
Классы фреймов:
- TbtkHTMLViewerFrame
- TbtkLookupHTMLViewerFrame
2.1.5.1. Общие положения¶
HTML фрейм предназначен для отображения и/или редактирования HTML страниц. Редактирование может происходить как в визуальном редакторе так и в редакторе HTML-кода.
Для использования подгружаемых скриптов необходимо добавлять тег совместимости браузера <meta http-equiv=”X-UA-Compatible” content=”IE=10”/> или <meta http-equiv=”X-UA-Compatible” content=”IE=edge”/>. Без этого тега он не подгружает и не выполняет скрипты вида <script src=””.
2.1.5.2. Отображение flash-файлов¶
Существует возможность отображения flash-файлов хранящихся в базе, для этого перед отображением HTML-страницы к относительному пути до объектов flash дописывается путь до исполняемого файла Global.exe. Дополняется только относительный путь, то есть путь который не содержит таких последовательностей как :** или **:/. О помещении в эту папку flash-файла разработчик должен позаботится самостоятельно.
2.1.5.2.1. Пример¶
Если клиент global.exe был запущен из папки C:DepotDevelopment_Global_LastBuildmain, то HTML-код
<span class="sc2"><<span class="kw2">html</span>></span>
<span class="sc2"><<span class="kw2">body</span>></span>
<span class="sc2"><<span class="kw2">object</span> <span class="kw3">classid</span><span class="sy0">=</span><span class="st0">"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"</span> <span class="kw3">codebase</span><span class="sy0">=</span><span class="st0">"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">"test1"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"movie"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"17.swf"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"quality"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"high"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"bgcolor"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"#ffffff"</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">object</span>></span>
<span class="sc2"><<span class="kw2">object</span> <span class="kw3">classid</span><span class="sy0">=</span><span class="st0">"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"</span> <span class="kw3">codebase</span><span class="sy0">=</span><span class="st0">"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">"test1"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"movie"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"http://rp5.ru/informer/100x100/1/17.swf"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"quality"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"high"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"bgcolor"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"#ffffff"</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">object</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">body</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">html</span>></span>
будет изменен на следующий
<span class="sc2"><<span class="kw2">html</span>></span>
<span class="sc2"><<span class="kw2">body</span>></span>
<span class="sc2"><<span class="kw2">object</span> <span class="kw3">classid</span><span class="sy0">=</span><span class="st0">"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"</span> <span class="kw3">codebase</span><span class="sy0">=</span><span class="st0">"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">"test1"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"movie"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"C:\Depot\Development\_Global_LastBuild\main\17.swf"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"quality"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"high"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"bgcolor"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"#ffffff"</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">object</span>></span>
<span class="sc2"><<span class="kw2">object</span> <span class="kw3">classid</span><span class="sy0">=</span><span class="st0">"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"</span> <span class="kw3">codebase</span><span class="sy0">=</span><span class="st0">"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">"100"</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">"test1"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"movie"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"http://rp5.ru/informer/100x100/1/17.swf"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"quality"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"high"</span>></span>
<span class="sc2"><<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">"bgcolor"</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">"#ffffff"</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">object</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">body</span>></span>
<span class="sc2"><<span class="sy0">/</span><span class="kw2">html</span>></span>
2.1.5.3. Паскаль скрипты в теле HTML¶
В документе HTML паскаль-скриптами могут быть ссылки. При нажатии на сслылку произойдёт не переход по ссылке, а выполнение скрипта в рамках текущей выборки.
Для этого в теле тэга, обозначающего гипер-ссылку, необходимо поместить управляющий тэг <script>. То что находится после этого тэга будет считаться скриптом
<a href="<script><Pascal>
ShowMessage('Hello, World');
</Pascal>">Паскаль скрипт</a>
Этот же подход можно использовать и с помощью JS формировать паскаль операции не лету:
<HTML>
<script type="text/javascript">
func t ion popup() {
alert('popup Hello World!');
window.location.assign("<script> <Pascal>ShowMessage('PASCAL Hello, World');</Pascal>");
}
</script>
<Body>
<a id="myLink" title="Click to do something" nohref onclick="popup();return false;">JS Script</a>
</Body>
</HTML>
2.1.6. RTF фрейм¶
Класс фрейма TbtkLookupRtfEditorFrame
2.1.6.2. Параметры фрейма¶
2.1.6.2.1. Источник данных¶
RtfFieldName: | Имя редактируемого поля. Поле должно быть типа Blob. |
---|
2.1.6.2.2. Настройки вида редактора¶
CanEdit: | Разрешить редактирование |
---|---|
RtfViewMode: | Вид редактора Зависит от значения параметра CanEdit.
|
RtfToolbars: | Отображаемые панели инструментов RTF. Зависит от значения параметра CanEdit.
|
2.1.6.3. GUI-команды фрейма¶
Redo Undo Cut Copy Paste SelectAll Bold Italic Underline Strikeout DoubleUderline DoubleStrikeout ParaAlignLeft ParaAlignRight ParaAlignCenter ParaAlignJustify ListBulleted ParaForm FontSizeInc FontSizeDec FontStyleSuperscript FontStyleSubscript ParaSingleSpaceing ParaDoubleSpaceing ParaSesquialteralSpaceing ListNumbering ListMultilevel ViewShowWhitespace ParaIndentInc ParaIndentDec FontColor FontName FontSize FontForm FileFind FileReplace FileFindNext TextHighlight TextToLowercase TextToUppercase TextToggleCase InsertSymbolForm InsertTableForm InsertHyperlinkForm InsertPicture InsertPageBreak TextSelectionOneColumn TextSelectionThreeColumn TextSelectionTwoColumn TextSelectionColumnForm TextColumnBreak PageColor SelectionLineNumberingNone SelectionLineNumberingContinuous SelectionLineNumberingRestartNewPage SelectionLineNumberingRestartNewSection TableBordersAll TableBordersNone TableBordersOutside TableBordersInside TableBordersLeft TableBordersRight TableBordersTop TableBordersBottom TableBordersHorz TableBordersVert Load SaveAs
2.1.6.4. F.A.Q¶
- Как вставить HTML в Rtf ?
Предлагается воспользоваться способностью IE помещать в буфер обмена при копировании HTML-контента так же и его аналог в формате RTF.
begin IE := CreateOleObject('InternetExplorer.Application'); try IE.Navigate('about:blank'); While IE.Busy do Sleep(50); objHTML := IE.document; objHTML.Write('<body>eea<b>b</b>c<i>d</i>e<s>f</s>g</body>'); objHTML.ExecCommand('SelectAll'); objHTML.ExecCommand('Copy'); Selection.Controller.ExecCommand('PASTE') finally IE.Quit; IE := null; end; end;
2.1.7. Просмотр PDF¶
2.1.7.1. Общие положения¶

Фрейм TbtkLookUpPDFViewFrame предоставляет возможность просматривать файлы в формате PDF. Для работы фрейма необходимо чтоб в системе был установлен Acrobat Reader, его можно скачать по адреcу http://get.adobe.com/ru/reader/ Из-за особенности работы ActiveX компонента Acrobat Reader’a, перед отображением блоб сохраняется во временный файл, после закрытия приложения временный файл будет удалён.
2.1.7.2. Свойства¶
- FileNameField - атрибут с именем файла или блобом для отображения
2.1.8. TbtkGridPanelFrame¶
Этот фрейм позволяет размещать детальные фреймы в виде таблицы, для указания ширины и высоты ячеек которой можно использовать как абсолютные, так и относительные величины.
Для настройки этого фрейма добавлены следующие свойства:
- Вкладка “Настройки фрейма”, группа “Размер фрейма”
- Количество колонок. Системное имя: TbtkGridPanelFrame.ColCount Определяет количество колонок на которые будет разделён фрейм.
- Размеры колонок. Системное имя: TbtkGridPanelFrame.ColSizes
Свойство задаёт размеры колонок таблицы фрейма. Должно содержать
размеры для числа колонок указанного в свойстве ColCount. Размеры
указываются последовательно, через точку с запятой. Можно указывать
как абсолютные, так и относительные значения. Для определения типа
указанного значения используются следующие обозначения:
- постфикс “px”, - значение указано в пикселях;
- постфикс “%”, - значение указано в процентах;
- ключевое слово auto, - значение подбирается по содержимому.Пример. “100px; 40%; 50px; auto; 60%; 100px”. При вычислении размеров колонок, вначале подсчитывается сумма фиксированных размеров(в пикселях и по содержимому), затем это значение вычитается из общей ширины фрейма, результат берётся за 100% оставшегося свободного места и на его основе высчитываются размеры колонок указанных в процентах. При этом, ширина каждой колонки, с размером указанным как “auto”, принимает значение ширины самого широкого из лежащих на ней фрейма.
- Количество строк. Системное имя: TbtkGridPanelFrame.RowCount Определяет количество строк на которые будет разделён фрейм.
- Размеры строк. Системное имя: TbtkGridPanelFrame.RowSizes
Свойство задаёт размеры строк таблицы фрейма. Должно содержать
размеры для числа строк указанного в свойстве RowCount. Размеры
указываются последовательно, через точку с запятой. Можно указывать
как абсолютные, так и относительные значения. Для определения типа
указанного значения используются следующие обозначения:
- постфикс “px”, - значение указано в пикселях;
- постфикс “%”, - значение указано в процентах;
- ключевое слово auto, - значение подбирается по содержимому.Пример. “100px; 40%; 50px; auto; 60%; 100px”. При вычислении размеров строк, вначале подсчитывается сумма фиксированных размеров(в пикселях и по содержимому), затем это значение вычитается из общей высоты фрейма, результат берётся за 100% оставшегося свободного места и на его основе высчитываются размеры строк указанных в процентах. При этом, высота каждой строки, с размером указанным как “auto”, принимает значение высоты самого высокого из лежащих на ней фрейма.
- Вкладка “Детали и закладки фрейма”, группа “Детали фрейма”
- Количество детальных выборок. Системное имя: TbtkGridPanelFrame.DetCount Количество детальных выборок которые необходимо разместить на фрейме. Значению этого свойства должны соответсвовать количества значений указанных в свойствах: “Координаты детальных выборок”, “Занимаемое место детальными выборками”, “Названия детальных выборок”.
- Названия детальных выборок. Системное имя: TbtkGridPanelFrame.DetSelNames Полные наименования детальных выборок, указанные через точку с запятой. Количество указанных наименований должно соответствовать значению указанному в свойстве “Количество детальных выборок” Пример: “Sel1.RoList; Sel1; Sel2.Card”
- Координаты детальных выборок. Системное имя: TbtkGridPanelFrame. Свойство задаёт позиции для фреймов детальных выборок. Для каждого детального фрейма указываются позиции по горизонтали и вертикали, разделённые запятой(“№Cтобца,%Строки”). Позиции отдельных фреймов разделяются точкой с запятой. Количество указанных позиций должно быть равно значению указанному в свойстве “Количество детальных выборок”. Порядок указанных координат должен соответствовать порядку деталей, указанных в свойстве “Наименования детальных выборок”. Пример: “3,0; 0,1;1,0” (указаны координаты для трёх детальных фреймов, расположенных в ячейках с координатами “3,0”, “0,1” и “1,0”). Самая первая ячейка имеет координаты “0,0”.
- Занимаемое место детальными выборками. Системное имя: ‘’‘TbtkGridPanelFrame.DetSelSpanSizes ‘’’ Свойство задаёт количество занимаемых колонок и строк для фреймов детальных выборок. Значения указываются последовательно для каждого детального фрейма и разделяются точкой с запятой. Каждое значение состоит из двух целых чисел разделённых запятой, первое - количество занимаемых колонок, второе - количество занимаемых строк. Пример: “1,1; 2,1;2,4” (Указаны координаты для трёх детальных фреймов. Первый фрейм занимает одну колонку и одну строку, второй - две колонки и одну строку и третий - две колонки и четыре строки)
2.1.9. Плиточный (Tile) фрейм с интерфейсом живые плитки (TbtkLookUpTileFrame)¶
2.1.9.1. Описание¶
Фрейм реализует плиточный интерфейс, где каждая запись представляется в виде живой плитки. Термин “живая плитка” был введен microsoft в своих интерфейсах https://msdn.microsoft.com/ru-ru/library/windows/apps/dn468032.aspx и https://msdn.microsoft.com/ru-ru/library/windows/apps/hh465403.aspx
2.1.9.1.1. О Принципе наполнения плиток¶
Каждая запись является плиткой. Плитки добавляются в группы. По умолчанию каждая группа имеет какую то максимальную ширину и высоту в плитках. Плитки заполняют группу слева-направо (по две колонки), сверху-вниз. После заполнения группы начинается заполнение новой группы.
2.1.9.1.2. О размере и контенте плиток¶
В базовом варианте плитки могут быть четырех размеров. На плитке можно вывести либо одно базовое графическое изображение, либо набор сменяющих друг друга изображений (пока не реализовано). Так же можно выводить текстовую информацию. Предполагается возможность задания четырех разных текстовых полей(не реализовано, пока только одного). Для каждого размера плитки можно загрузить отдельное изображение.
Рекомендуемые размеры изображений при размерах Regular блока 100x100:
- Small - 32x32px
- Regular - 48x48px (C учетов выравнивания изображения oaTopCenter и вертикальным отступом в 20px)
- Large - 48x48px (C учетов выравнивания изображения oaTopCenter и вертикальным отступом в 20px)
- ExtraLarge - 96x96px
Рекомендуемые размеры предпологают, что в базовом и широком размере останется место под текст в две строки.
2.1.9.1.3. Базовые возможности пользователя¶
- Перетаскивать плитки из группы в группу
- Менять плитки местами
- Перетаскивать группы
- Создать новую группу, путем перетаскивания существующей плитки на пустое место
- Клиентская фильтрация
2.1.9.1.4. Работа с датасетом¶
- Сфокусированная запись соответствует выделенной плитке
- Перестроить фрейм можно с помощью переоткрытия датасета. На обновление, вставку, удаление и изменение записи обновление интерфейса не производится.
2.1.9.2. Параметры фрейма¶
Все параметры имеют префикс TbtkLookUpTileFrame, потому дальше мы его опустим
2.1.9.2.1. Обязательные настройки¶
- DataFields.CaptionFieldName (Имя поля с текстом
заголовка) - Поле может содержать заголовок который будет выводиться на плитке. Плитка может обладать 4 заголовками. Остальные заголовки можно задать в поле с дополнительными настройками
- DataFields.SystemNameFieldName (Имя поля с идентификатором) - Свойство задает имя атрибута в котором будет содержаться
идентификатор, который однозначно обозначит плитку.
- DataFields.ImageFieldName (Имя поля с изображением) - Поле может содержать blob с изображением которое будет выведено на
плитку. Изображение должно быть в любом из форматов png, jpg, bmp.
- DataFields.PropertiesFieldName (Имя поля с настройками плитки) - свойства плитки. Поле может содержать свойства плитки. Свойства в
формате ‘’ИмяСвойства=ЗначениеСвойства;ИмяСвойства=ЗначениеСвойства; и т.д. ‘’Набор свойств описан в следующем разделе. В значение свойств допускается использование знаков «;» и «=», но в этом случае необходимо выполнять экранирование с помощью двойных кавычек и значение свойства, так и всю пару “ИмяCвойства=”“ЗначениеСвойства”“” Пример: Size=tsExtraLarge;”Caption1.Font=”“FN=Roboto Lt;FS=8;FB=1;FU=1;FC=clTeal;C=clGreen;”“
2.1.9.2.2. Свойства стиля(цвета, шрифты)¶
- Style.Background.GradientBeginColor (Цвет начала градиента) - Цвет начала градиента. Задается стилем BTK. Если
TbtkLookUpTileFrame.Style.Background.GradientEndColor не задан, тогда градиент не используется, а цветом Style.Background.GradientBeginColor осуществляется равномерная заливка. Пример: #GlobalContentBGColor - названия стиля из списка стилей BTK, либо C=clBlue
- Style.Background.GradientEndColo (Цвет конца градиента) - Задается стилем BTK. Для большей информацией
смотреть помощь по свойству TbtkLookUpTileFrame.Style.Background.GradientBeginColor
- Style.Background.GradientMode (Направление градиента) - Направление градиентной заливки. Может принимать следующие значения перечисления TdxSkinGradientMode = (
- gmHorizontal, - горизонтальная
- gmVertical, - вертикальная
- gmForwardDiagonal, - диагональная от левого нижнего угла в правому верхнему
- gmBackwardDiagonal - диагольная, левого верхнего к правому нижнему);
- Style.Item.Color (Цвет плитки) - Цвет плитки по умолчанию.
Задается стилем BTK. Пример: #GlobalTileColor - названия стиля из списка стилей BTK, либо C=clBlue
- Style.Item.Focused.Color (Цвет фокусированной плитки) - Цвет фокусированной плитки по умолчанию. Задается стилем BTK.
Пример: #GlobalFocusedTileColor - названия стиля из списка стилей BTK либо C=clRed
- Style.Item.Font (Шрифт текста плитки) - Свойство задает
настройки шрифта. Для задания используется стиль BTK. Пример: Btk_AppStyle, либо FN=Roboto Lt;FS=8;FB=1;FU=1;FC=clTeal;C=clGreen
2.1.9.2.3. Настройка контроллера¶
- View.Item.Captions.HideOnSmallTile (Скрывать текст заголовков на
маленькой плитке) - Позволяет управлять видимостью заголовков у плитки размеров tsSmall. Если выставить в True(по умолчанию), тогда все заголовки будет скрыты у плиток с размером tsSmall.
- View.Item.Caption1.WordWrap (Автоматический перенос слов)
- Свойство управляет автоматическим переносом заголовков плитки при
выходе их за границу плитки. Возможен так же ручной перевод на новую строку c помощью символов #13#10, которые необходимо вставлять в текст заголовка по месту переноса. Ручной перевод на новую строку работает не зависимо от свойства WordWrap По умолчанию свойство выключено. Включение WordWrap по умолчанию может быть опасно , так как неподготовленный текст станет наезжать на иконку и станет полностью с самого начала не читаемым из-за совпадания цвета иконки и цвета шрифта.
- View.Item.RegularWidth (Размер базовой плитки) - По умолчанию
размер Regular плитки 100x100px. Размеры остальных плиток высчитываются относительно базового. tsSmall - квадрат со сторонами в два раза меньше tsRegular tsRegular - квадрат со стороными по умолчанию в 100 пикселей. tsLarge - прямоугольник со шириной в два раза больше tsRegular, tsExtraLarge - квадрат с высотой в два раза больше tsLarge.
- View.Filter.Visible (Видимость фильтра) - управляет видимостью
редактора клиентского фильтра. По умолчанию свойство включено.
Выравнивание изображения. Имеет смысл когда не задан Glyph.AlignWithText.
- View.Item.Glyph.Align.ForRegular (Выравнивание изображения для
Regular плитки) - oaTopCenter по умолчанеию
- View.Item.Glyph.Align.ForLarge (Выравнивание изображения для
Large плитки) - oaTopCenter по умолчанеию
- View.Item.Glyph.Align.ForExtraLarge (Выравнивание изображения
для ExtraLarge плитки) - oaMiddleCenter по умолчанеию
Вертикальный отступ в пикселях для изображения для каждого размера плитки. Имеет смысл когда View.Item.Glyph.align не содержит характеристики Middle.
- View.Item.Glyph.IndentVert.ForRegular (Отступ вертикальный для
Regular плитки) - 20 по умолчанию
- View.Item.Glyph.IndentVert.ForLarge (Отступ вертикальный для
Large плитки) - 20 по умолчанию
- View.Item.Glyph.IndentVert.ForLarge (Отступ вертикальный для
ExtraLarge плитки) - 6
- View.Groups.GroupMaxRowCount (Максимальное количество записей в
группе) - Задает максимальное количество рядов плитки в группе. Высота ряда равняется размерам плитки с типом tsRegular.
- View.Groups.List (Группы) - Задает набор групп и их свойства:
наименование, системное имя и порядок следования. СистемноеИмяГруппы=НаименованиеГруппы;СистемноеИмяГруппы=НаименованиеГруппы; и т.д. СистемноеИмяГруппы=НаименованиеГруппы; и т.д. СистемноеИмяГруппы=НаименованиеГруппы; и т.д. Группы могут быть заданы либо в этом свойстве, либо в свойствах плитки. Если у плитке в свойствах задана принадлежность какойто группе по системному имени, но такой группы не существует, тогда эта группа будет создана.
2.1.9.2.4. Настройки подгрузки изображений на каждый размер плитки¶
- View.Item.ImageLoadMode (“Режим работы с изображениями”).
Возможны два варианта: * ilmImagePerTile(по умолчанию) - Одно изображение на плитку. Изображения загружаются из текущей выборки Tile фрейма. * ilmImagePerTileSize - Одно изображение на каждый на размер конкретной плитки. Изображения загружаются из дополнительно заданной выборки. Выборка должна вернуть все изображения за один запрос. Для работы этого режима необходимо задать свойства TbtkLookUpTileFrame.Images.*
- Images.Selection.EntityName (Имя выборки изображений)
- Images.Selection.Representation (Отображение выборки
изображений)Поля в выборке с изображениями:
- Images.DataFields.ImageFieldName (Имя поля с изображением) - блоб с изображением.
- Images.DataFields.ItemSystemNameFieldName (Имя поля с идентификатором плитки)
- Images.DataFields.ItemSizeFieldName (Имя поля с размером плитки)
2.1.9.2.5. Свойства плитки¶
Свойства плитки могуть прийти в GST. В поле взятом из настройки DataFields.PropertiesFieldName. Настройки плитки перекрывают настройки по умолчанию заданные в свойствах выборки.
- Size - размер плитки. Может принимать следующие значения
- tsSmall - квадрат со сторонами в два раза меньше tsRegular
- tsRegular - квадрат со стороными по умолчанию в 100 пикселей.
- tsLarge - прямоугольник со шириной в два раза больше tsRegular,
- tsExtraLarge - квадрат с высотой в два раза больше tsLarge.
- Group.Name - системное имя или индекс группы в которую входит
плитка. Системое имя передается в кавычках. Индекс без кавычек. Пример: Group.Name=”MainGroup” и Group.Name=2 - третья по очереди группа. Если группы с таким системным именем не существует, будет создана новая группа с таким системным именем. Порядок групп и их наименование можно задать в свойстве фрейма TbtkLookUpTileFrame.View.Groups.List
- Caption1.Align - выравнивание заголовка. Можно задать следующие
значения перечисления TdxTileItemInnerObjectAlignment - oaDefault - по умолчанию, - oaTopLeft, - oaTopCenter, - oaTopRight, - oaMiddleLeft, - oaMiddleCenter, - oaMiddleRight, - oaBottomLeft, - oaBottomCenter, - oaBottomRight.
- Caption1.Font - шрифт заголовка. Стандартная настройка шрифта
используемая в системе при задание стиля. Настройка шрифта должна быть в кавычках. Пример: Caption1.Font=”FN=Roboto Lt;FS=8;FB=1;FU=1;FC=clTeal;C=clGreen;”
- Glyph.Align - выравнивание изображение внутри плитки. Может
значения перечисления TdxTileItemInnerObjectAlignment * oaDefault - по умолчанию, * oaTopLeft, * oaTopCenter, * oaTopRight, * oaMiddleLeft, * oaMiddleCenter, * oaMiddleRight, * oaBottomLeft, * oaBottomCenter, * oaBottomRight
- Glyph.AlignWithText - выравнивание текста относительно
изображения. Может принимать значения перечисления TdxTileControlImageWithTextAlignment: * itaNone, * itaLeft, * itaTop, * itaRight, * itaBottom.
Выравнивание картинки и текста может осуществляться независимо, либо совместо. Это свойство как раз регулирует совместное выраванивание. Если значение itaNone или не задано, тогда для выравнивания картинки используется свойство Glyph.Align, а для выравнивания текста используется Captions.Align. Иначе заголовк выравнивается относительно картинки. В этом случае гарантированно текст не будет наезжать на картинку. Однако варианты выраваниваний текст получаются ограниченными: слева, справа, сверху, снизу, т.е. снизу-слева уже текст не расположить.
- Glyph.FitMode - способ вписания изображения в плитку. Может
принимать значения следующего перечисления TcxImageFitMode
- ifmNormal - изображение распологается по центру без изменений в родном разрешение,
- ifmStretch - изображение растягивается(либо сжимается) до размеров плитки,
- ifmProportionalStretch - тоже самое что предыдущее, но при расстягивание соблюдаются пропорции оригинального изображения,
- ifmFit - если изображение больше чем плитка, тогда изображение ужимается до размеров плитки,
- ifmFill - плитка заполняется размноженным изображением в оригинальном разрешение (“моститься”));
- Style.GradientBeginColor - цвет начала градиентной заливки;
Задается стилем BTK.
- Style.GradientEndColor - цвет конца градиентной заливки; Задается
стилем BTK.
- Style.GradientMode - направление градиентной заливки. Может
принимать следующиезначения перечисления TdxSkinGradientMode = ( * gmHorizontal, - горизонтальная * gmVertical, - вертикальная * gmForwardDiagonal, - диагональная от левого нижнего угла в правому верхнему * gmBackwardDiagonal - диагольная, левого верхнего к правому нижнему);
2.1.10. Выделение нескольких записей (мультиселект)¶
Во фреймах типа список и древовидный список существует возможность выбора нескольких записей (мультиселект). Изменять режим мультиселекта можно следующими способами:
- При вызове списка с помощью методов
InternalLibrary.TbtkScriptSelectionObject.DoLookup
илиInternalLibrary.TbtkScriptSelectionObject.DoLookupEx
InternalLibrary.TbtkScriptSelectionObject.DoLookupEx
¶<pascal>
R := DoLookupEx(
'',
'SEL_TST_MultySelectFromGrid',
[],
[],
['id','A1'],
True, //параметр отвечающий за мультиселект
['Representation'],
['Choose']);
</pascal>
- С помощью свойства фрейма MultiSelect.
Так-же его значение можно передать в качестве параметра в
InternalLibrary.TbtkScriptSelectionObject.CreateFormEx
- С помощью
InternalLibrary.TbtkScriptSelectionObject.SetVar
.
InternalLibrary.TbtkScriptSelectionObject.SetVar
¶<pascal>
SetVar('MultiSelect', 1); //включение
SetVar('MultiSelect', 0); //отключение
</pascal>
Note
При отключении режима мультиселекта выделение будет сброшено, выделенной останется запись, на которой установлен фокус.
2.1.10.1. Методы и свойства паскаль скриптора¶
InternalLibrary.TbtkScriptSelectionObject.SelectedRecordsCount
- Количество выделенных записей.
InternalLibrary.TbtkScriptSelectionObject.SelectedValue
- Значение выделенной записи по индексу поля.
InternalLibrary.TbtkScriptSelectionObject.SelectedValuebyName
- Значение выделенной записи по имени поля.
2.1.11. Перетаскивание объектов мышью (Drag & Drop)¶
Между фреймами содержащими список, древовидный список или диаграмму возможно организовать перетаскивание элементов (Drag & Drop). Возможность перетаскивания и режим перетаскивания определяются свойствами фреймов.
New in version 5.4.0.3745: Возможность перетаскивания на диаграмму.
2.1.11.1. Свойства фреймов¶
- CanDragRows
Перетаскивание строк c фрейма.
Разрешает перетаскивать строки с данного фрейма;
- CanDropRows
Перетаскивание строк на фрейм.
Разрешает перетаскивать строки на данный фрейм с других фреймов;
- DragAndDropRows.DragMode
Начало перетаскивания.
Начало перетаскивания определяет как будет запускаться процесс перетаскивания:
dmAutomatic (автоматический режим): перетаскивание начинается после начала перемещения указателя мыши в “нажатом” состоянии. dmManual (ручной режим): при нажатии на кнопку мыши вызывается операция-триггер OnCanStartDrag, в которой программист самостоятельно включает режим перетаскивания. - DragAndDropRows.AutoDropTo
Автоматическое перемещение записи при перетаскивание.
Компонент древовидный список обладает функциональностью позволяющей без написания дополнительной логики выполнять перемещение записи между узлами. Если свойство установлено в True, то будем выполняться автоматическое перемещение записи, если в False - тогда в операции onDragDrop необходим пользовательский код, который выполнит перемещение родительской записи. По умолчанию при автоматическом перемещении после завершения перетаскивания записи, запись становиться дочерней по отношений к той над которой было закончено перетаскивание. Для управления поведением (переместить в качестве потомка, или на тот же уровень) при бросании записи используется метод
InternalLibrary.TbtkScriptControllerObject.SetDropAsChild
.
2.1.11.2. События фреймов¶
В процессе перетаскивания, в выборке срабатывают следующие события (вызываются операции-тригеры, если они существуют в выборке)
- OnCanStartDrag
- срабатывает перед началом перетаскивания, если выбран “ручной режим” перетаскивания.
- OnDragOver
вызывается при перемещение указателя мыши в режиме перетаскивания.
Операция позволяет оперировать свойством
InternalLibrary.TbtkScriptControllerObject.AcceptDragObject
. Свойство определяет может принять данный фрейм перетаскиваемый объект или нет.- OnDragDrop
- операция вызывается при “бросании” перетаскиваемого объекта.
2.1.11.3. Методы и свойства паскаль скриптора¶
InternalLibrary.TbtkScriptControllerObject.BeginDrag
- Метод запускающий перетаскивание в ручном режиме.
InternalLibrary.TbtkScriptControllerObject.DragObject
- Источник инициировавший перетаскивание.
InternalLibrary.TbtkScriptControllerObject.AcceptDragObject
- Возможность «принятия» перетаскиваемого объекта объектом, над которым находится курсор мыши.
InternalLibrary.TbtkScriptControllerObject.DragRecord
- Ссылка на обёртку записи списка или древовидного списка, либо элемента диаграммы, над которой находится курсор мыши.
InternalLibrary.TbtkScriptControllerObject.SetDropAsChild
- Метод определяющий как нужно перенести запись.
InternalLibrary.TbtkScriptRecordObject.ValueByName
- Значение ячейки по имени поля.
InternalLibrary.TbtkScriptRecordObject.Values
- Значение ячейки по индексу.
Используя Выделение нескольких записей (мультиселект) можно перетаскивать несколько записей.
2.1.11.4. Пример использования Drag & Drop.¶
Рассмотрим пример настройки перетаскивания записей из списка “источника” в список “приёмник”.
Для органицации перетаскивания записей в свойствах фрейма выборки-источника установим флаг “Перетаскивание строк c фрейма”. Свойство “Режим перетаскивания” изменять не будем, оставив его равным значению “Автоматический”. Если мы установим свойство “Режим перетаскивания” в “Ручной”, то в выборке-источнике потребуется создать операцию OnCanStartDrag:
<pascal>
selection.Controller.BeginDrag(false,8);
</pascal>
Создавать операцию OnCanStartDrag в режиме перетаскивания “Автоматичекий” не нужно.
InternalLibrary.TbtkScriptControllerObject.DragRecord
¶<pascal>
selObj := selection.Controller.DragObject;
if Assigned(selObj) and (selObj.representation <> selection.Representation) then
selection.Controller.AcceptDragObject := True
else
selection.Controller.AcceptDragObject := False;
if Assigned(selection.Controller.dragRecord) then
SetVar('Caption', selection.Controller.dragRecord.valueByName['sCaption']);
</pascal>
2.1.11.5. Межпроцессовый Drag & Drop¶
Возможность принимать файлы доступна во фреймах TbtkLookupGridFrame, TbtkLookupTreeFrame и их наследниках, при этом в качестве цели для бросания выступают непосредственно список и древовидный список, а не фреймы вцелом. В свойствах фреймов добавлен раздел “Параметры межпроцессового Drag-and-Drop для файлов”, со следующими свойствами:
- FileDropEnabled
Разрешить бросание
Позволяет включать и отключать обработку бросаемых файлов.
- FileDropOperation
Операция вызываемая на бросание
Определяет имя операции, которая будет обрабатывать событие бросания.
Для включения возможности приёма бросаемых файлов, необходимо чтобы оба свойства были заполнены. У операции-обработчика доступны следующие аргументы:
- Args.FileNames
- Массив имен файлов;
- Args.DropEffect
In/out параметр определяющий выполняемые/выполненные действия при бросании. Может принимать следующие значения:
deCopy: копирование файлов; deLink: создание ссылок на файлы; deMove: перемещение файлов; deNone: отсутствие какого-либо действия;
В зависимости от типа файлов и активных клавиатурных модификаторов (клавиши Shift, Ctrl и Alt) входное значение флага Args.DropEffect может меняться. Для корректного взаимодействия с приложением из которого были брошены файлы, после выполнения операций над файлами необходимо установить соответствующее произведённым действиям значение свойства Args.DropEffect.
2.2. Редакторы аттрибутов¶
2.2.1. Выпадающий список с мультивыбором (etTagLookUp)¶
2.2.1.1. Способ организации иерархии тегов¶
Пример на Support в списке и карточке ДП и задач.
Пример:
- SysDev/TaskType/ - тега нет, только namespace
- SysDev/TaskType/feature - где тег feature, а namespace SysDev→TaskType
- SysDev/TaskType/bug - где тег bug, а namespace SysDev→TaskType
- SysDev/TaskType/bug//feature - где тег bug/feature, а namespace SysDev→TaskType
2.2.2. Редакторы даты и времени (etDateTime, etDate, etTime)¶
2.2.2.1. Использование со строковым типом данных¶
При использовании редакторов etDateTime, etDate и etTime с полями строкового типа (ftString) дата и время хранятся в глобальном формате. При выводе значений в пользовательском интерфейсе они приводятся к локальному формату, чтобы их отображение соответствовало формату в котором по умолчанию отображаются значения в этих редакторах для полей с типом ftDate.
Для всех трёх редакторов в поле может быть записана строка, как содержащая дату и время полностью, так и только дату или только время.
Что именно будет храниться в ячейке зависит от того откуда в неё были внесены данные. Если данные вносились через буфер обмена или InternalLibrary.TbtkScriptSelectionObject.SetVar
, то в ячейках могут оказаться значения любого типа: только время, только дата, или дата и время вместе.
Changed in version 5.4.14: Если значения вносятся из редактора, то дата и время всегда записываются полностью. При этом редактор даты будет сохранять в качестве нулевого времени 00:00:00
, а редактор времени в качестве даты 30.12.1899
(см. Базовая дата Windows). В предыдущих версиях клиента, редакторы даты писали только дату, а редакторы времени только время.
Чтобы корректно работать со значениями полученными методом InternalLibrary.TbtkScriptSelectionObject.GetVar
, из строковых полей в которых храниться дата, рекомендуется приводить их к типу TDateTime с помощью метода InternalLibrary.StrToDateTimeFmt
, с указанием глобального формата.
От использования методов InternalLibrary.StrToDateFmt
и InternalLibrary.StrToTimeFmt
лучше воздержаться, так-как в отличии от InternalLibrary.StrToDateTimeFmt
они ожидают что в строке указано что-нибудь конкретное (время или дата).
Чтобы гарантировать запись корректного значения даты-времени в строковое поле через InternalLibrary.TbtkScriptSelectionObject.SetVar
следует передавать значение в типе TDateTime, либо в строке но с глобальным форматом даты-времени.
2.3. Работа с данными¶
2.3.1. Сортировка серверная¶
Сортировка выполняется как обычно при помощи щелчка мыши по заголовку столбца. Для сортировки по нескольким столбцам нужно при щелчке удерживать клавишу Shift. При этом сортировка произойдет только при отпускании клавиши. Для исключения столбца из сортировки нужно щелкнуть по нему при нажатой клавиши Ctrl. Перед выполнением сортировки анализируется текст операции GetSQLText. Если в выборке есть макрос &SortOrder#, то он раскрывается в строку вида “order by AttrName1, AttrName2 ...”. Если макрос не найден и выборка не является курсорной, то исходный запрос окружается выражением “select * from (...) order by AttrName1, AttrName2 ...”. Если выборка курсорная, то ничего не меняется. При необходимости текст запроса может анализировать параметр по имени SortOrder#. Он содержит либо пустую строку, либо строку вида “order by AttrName1, AttrName2 ...”. В свойствах выборки есть настройка, отключающая наложение макроса сортировки - “накладывать макрос сортировки”.
Подробнее про использование макросов выборкок см. здесь
2.3.2. Группировка серверная¶
Группировка необходима для ограничения набора данных по вхождению элемента в определённую группу. К запросу в GetSQLText добавляется макрос &GroupMacros
Пример:
SELECT
t.ID
, t.idGroup, BTK_ClientGate.GetHeadLineGroup(t.idGroup) AS idGroup_HL
, t.sCAPTION
, t.sSystemName
, t.idClass
FROM GroupPanelTest t
WHERE
&GroupMacros
Идентификатор группы задаётся через параметр idGroup# (обычно значение этого параметра задаётся через панель группировки). Включение/отключение группировки управляется с помощью параметра IsGroupingEnabled#. Параметр IsGroupingEnabled# поддерживается клиаентом с версии 4.25.130 (До версии использовался IsGrouping#, сейчас этот параметр считается устаревшим, использовать его нельзя, группировка включена в нем, если значение равно 0).
Значения IsGroupingEnabled#:
1 - группировка включена. Макрос &GroupMacros будет заменён на стандартный текст:
EXISTS (SELECT a.id
FROM BTK_FlatObjectGroup a
WHERE a.idObject = t.id
AND a.idGroup = :idGroup# )
0 - группировка выключена. Макрос будет заменен на:
((1=1) OR (:idGroup# IS NULL)) //Такое странное условие, что бы не терялись хуки на параметр IdGroup#. Если группировка будет включена, и значение группы измениться, выборка должна будет обновиться.
Для курсорных выборок, в которых использование макросов не возможно, необходимо вместо макроса &GroupMacros необходимо использовать параметр :GroupMacros. Правила его замены на соответствующие выражения аналогичны правилам замены макроса &GroupMacros.
2.3.3. Фильтрация серверная¶
Универсальные фильтры предоставляют следующие возможности:
- Применение фильтра по умолчанию к выборке до её открытия, следовательно, на клиента будут переданы уже отфильтрованные данные, что значительно снижает нагрузку на канал связи с сервером и уменьшает время открытия выборок, т.е. увеличивает скорость работы приложения.
- Сохранённые настройки фильтра могут быть как общими, так и персональными.
- Критерии фильтрации могут быть настроены непосредственно пользователем, а не только разработчиком.
- Каждый пользователь может создавать собственные настройки фильтра, сохранять их и использовать по умолчанию. Причём, количество настроек не ограничено.
- Настройка фильтра может быть сохранена как для выборки в целом, так и для каждого отображения в отдельности.
2.3.4. Использование универсальных фильтров¶
Нажмите кнопку «Фильтр» на панели управления или в контекстном меню. Настройте условия фильтрации в отобразившемся диалоге.

Управляющие кнопки:
- «Открыть…» - открывает диалог выбора (редактирования) пользовательских сохраненных настроек. Список так же содержит общие настройки, они доступны только для выбора.
- «Открыть общие настройки…» - (операция находится в выпадающем меню под кнопкой «Открыть…») открывает диалог выбора (редактирования) общих сохраненных настроек.
- «Сохранить» - сохраняет настройку фильтра.
- «Сохранить как…» - сохраняет настройку фильтра под новым именем.
- «OK» - применяет фильтр и закрывает построитель фильтров«Отмена» - закрывает построитель фильтров с отменой всех изменений фильтра (кроме сохранений), без применения фильтра.
- «Применить» - Применяет фильтр без закрытия построителя фильтра.
2.3.5. Для разработчика приложений¶
Универсальный фильтр позволяет создавать сложные условия фильтрации
данных в визуальном редакторе фильтра. После применения универсального фильтра в GetSQLText выборки будут внесены условия, указанные в мастере фильтра. Если GetSQLText содержит простой запрос то, после применения универсального фильтра существующий запрос будет окружён запросом фильтрации (курсорный запрос окружаться запросов фильтрации не будет):
Select * from ({Исходный запрос}) where {условие фильрации}
Для того, что бы GetSQLText не окружался дополнительным запросом, необходимо, что бы в тексте запроса содержался макрос &DefUniFltMacros.
Select * from MyTable where &DefUniFltMacros
Если условий фильрации не задано, макрос &DefUniFltMacros будет заменён на строку «(2 = 2)»
Так-же для получения значения универсального фильтра в запросе можно использовать параметр :DefUniFltMacros.
Attention
Если вы используете курсорную выборку, и в запросе отсутствует макрос &DefUniFltMacros, выражение фильтра не будет поставлено.
2.3.5.1. Настройка фильтруемых атрибутов выборки¶
Для обычных (значимых) атрибутов настройка не требуется. Если вы хотите исключить атрибут из списка фильтруемых, установите свойство «Доступен в универсальном фильтре» в false. Для ссылочных атрибутов требуется следующая настройка:
- В свойстве «Заголовов ссылочного атрибута» должно быть указано имя атрибута являющегося заголовком для данного ссылочного атрибута.
- У атрибута, который является заголовком, должны быть проставлено свойства «Изменяемый атрибут» и «Ссылка на класс».Если вы хотите указать выборку с отображением, из которой пользователь должен выбирать значение для фильтрации, укажите свойства «Выборка» и «Отображение».
При компиляции класса все необходимые свойства будут проставлены.
Указание для ссылочного атрибута и его заголовка описанных выше свойств необходимо для того, что бы:
- Фильтрация была доступна как для ссылочного атрибута, так и для его заголовка, причем, если в фильтре будет участвовать заголовок, фильтрация будет происходить не по тексту заголовка, а по идентификатору объекта, которому принадлежит заголовок.
- Была известна выборка, которую необходимо открыть для выбора значения ссылочного атрибута.
По умолчанию, для фильтрации доступны все видимые атрибуты, если вам необходимо фильтроватьпо невидимому атрибуту явно укажите свойство «Доступен в универсальном фильтре»
2.3.5.2. О доступности сохранённых настроек фильтров в отображениях¶
С помощью свойства «Использовать ун-ный фильтр Default отображения» можно указать, что выборка должна использовать настройки фильтра, общие для всех отображений (настроенные для отображения Default). Если этот флаг не установлен, настройки, сохранённые в каком-либо отображении, не будут видны в другом отображении.
2.3.5.3. Read-Only фильтр разработчика¶
Есть возможность задать условие фильтрации, которое не будет доступно пользователю для редактирования. для этого необходимо обратиться к полю UniFilterMacrosRO выборки:
Selection.UniFilterMacrosRO := 'AttrName > 100500';
Такое условие будет дополнять обычный фильтр, и будет выводиться в нижней части карточки универсального фильтра в виде текста. Оно недоступно для редактирования из карточки.

2.3.5.4. Паскаль-события фильтрации¶
Указанные события вызываются при работе с универсальным фильтром. Необходимы для работы с новым универсальным фильтром на базе выборки.
Перечень всех событий фильтрации с кратким описанием см. здесь
События OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter могут возвращать объект класса TbtkNamedArgs, созданный с помощью скриптового метода CreateArgs. Обязательные поля - Code (0 - успешно) и WhereMacro - текст запроса, который будет добавлен к макросу фильтрации при его применении (Apply). Условие, возвращенное в WhereMacro, будет приписано к макросу &DefUniFltMacros. Имеется особенность - тексты запросов, возвращаемых операциями OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter, записываются в специальное локальное значение. И каждое новое (непустое!) значение затирает старое.
События OnFilterInit и OnFilterFinalize вызываются сразу после и до операций OnLoadMeta и OnUnLoadMeta соответственно. Операция OnFilterInit может возвращать результат (типа Variant), который в последствии будет передаваться как входной параметр в методы OnApplyFilter, OnResetFilter и OnAddSelectedRecToFilter при каждом их вызове. Возвращение значения операцией OnFilterFinalize не предполагается (будет игнорировано).
События OnFilterInit среди своих параметров может содержать поле Alias, использующееся для формирования запроса GetSqlText. При применении серверного фильтра выборки некурсорная операция GetSqlText оборачивается следующим образом:
select &ServFilterAliasMacros.*
from (<исходный запрос>) &ServFilterAliasMacros
where &DefUniFltMacros and &DefUniFltMacrosRO
где:
- &ServFilterAliasMacros - макрос, принимающий значение параметра Alias.
- &DefUniFltMacros и &DefUniFltMacrosRO - макросы фильтрации, изпользовавшиеся ранее.
Указанные макросы дописываются в случаях, когда они еще отсутствуют в выборке, и соответствующие им значения не пусты.
2.3.6. Частичная прогрузка древовидного списка¶
Операция GetSQLText, возвращающая курсор для отображения в дереве Пример выборки:
[CURSOR r ]
BEGIN
IF &SelectType = 'Select' THEN
OPEN :r FOR
SELECT * FROM btk_registry WHERE NVL(idParent,0) = NVL(:OpenNodeId,0) &SortOrder;
ELSIF &SelectType = 'RefreshNodes' THEN
OPEN :r FOR
SELECT * FROM btk_registry START WITH NVL(idParent, 0) = NVL(:idRoot, 0) OR id IN( &OpenNodeIdArray ) CONNECT BY id = PRIOR idParent &SortOrder;
END IF;
END;
В выборке должен анализироваться макрос &SelectType. Возможные значения:
- Select – курсор должен вернуть все подузлы текущей записи, идентификатор которой передается в параметре :OpenNodeId, который имеет тип идентификатора. При открытии дерева (самый первый запрос) :OpenNodeId = null;
- RefreshNodes - получить всех родителей до :IdRoot с их подузлами + свои подузлы. Список открытых узлов доступен в параметре :OpenNodeIdArray, который представлять собой строку идентификаторов, разделенный запятыми.
В операции доступен параметр :IdRoot – идентификатор корня (м.б. Null). Одновременно с параметром :OpenNodeId и :OpenNodeIdArray можно использовать макросы &OpenNodeId и &OpenNodeIdArray. Курсор должен возвращать обязательные поля:
- ID – идентификатор записи
- Text – текст, отображаемый в узле
- IDParent – ID родительской записи
- BHasChild – значение 0 или 1 – признак наличия подузлов
- ImageIndex – номер иконки узла (необязательное поле).
Соответствия между реальными именами полей из курсора и теми, которые ожидает дерево, устанавливаеться в закладке «Дополнительные свойства» у выборки (можно воспользоваться мастером). Операция RefreshItem должна возвращать все поля, которые нужно будет редактировать.