| ||||
![]() | ||||
<< 1.8 Диалоговые формы | Оглавление | 1.10 Описание встроенных процедур и функций, а также свойств и методов источников данных >> | ||
В состав программы входит интерпретатор Pascal-подобного языка. Данный интерпретатор является мощным средством, позволяющим писать скрипты, выполняющиеся при построении отчетов.
В качестве языка используется диалект Pascal, со следующими возможностями:
* операторы: присваивания; условные операторы, операторы циклов и безусловного перехода: if...then...else, while...do, repeat...until, for..to..do, goto;
* операторные скобки begin...end;
* безтиповые переменные, массивы;
* обращение к свойствам и методам объектов программы через точечную нотацию.
Язык по сравнению с Object Pascal сильно упрощен. Так, используются следующие упрощения:
* все переменные имеют тип Variant;
* отсутствует описание переменных;
* все переменные являются глобальными, нет локальных переменных;
* отсутствуют такие типы данных, как "класс", "запись", перечисляемый тип и т.п.;
* нет возможности написания собственных процедур или функций;
* нет операторов прерывания цикла (break, continue);
* количество параметров, передаваемых в процедуру или функцию, может быть не более 3 (для передачи боле чем 3 параметров необходимо использовать функцию ARGS.Call(<function_name>,<array_name>). Передача параметров осуществляется через массив (см. Класс ARGS на стр. 69).);
* в связи с тем, что переменные не имеют типа, контроль типов данных невозможен — это следует учитывать при написании логических выражений;
* массивы могут быть только одномерными.
Несмотря на значительные упрощения, интерпретатор позволяет выполнять довольно сложную обработку информации. Из скрипта доступны все свойства и методы объектов отчета.
В скрипте можно создавать переменные и массивы, которые будут доступны во всем отчете. О возможностях встроенного языка говорит тот факт, что такая довольно сложная задача, как печать сумм группы в ее заголовке (сама сумма считается в подвале группы) средствами программы делается элементарно.
Соответствие типов данных мастера создания отчетов и Object Pascal рассмотрено ниже (табл. 1.13 на стр. 61):
std::vector<...> |
соответствует типизированному массиву (array[] of ...) |
TPicture* |
указатель, соответствует TPicture. Нельзя копировать как значение, только как указатель. |
AnsiString |
соответствует AnsiString |
int |
соответствует integer |
double |
соответствует double |
void |
метод такого типа ничего не возвращает, соответствует процедуре |
TDataTime |
соответствует TDataTime |
bool |
соответствует Boolean |
unsigned int |
соответствует Cardinal |
Variant |
соответствует Variant |
В каждом объекте может быть размещен один или несколько (блок) операторов. Редактирование скрипта производится в окне редактора текста (для того, чтобы увидеть скрипт, надо нажать кнопку в верхней части окна). Скрипт выполняется каждый раз перед печатью объекта.
По сути, скрипт является обработчиком события OnBeforePrint объекта.
Рис. 1.56.
Скрипт имеется не только у объектов. И бэнды, и страницы отчета также имеют свой скрипт. Вызвать скрипт бэнда можно, вызвав редактор свойства OnBeforePrint бэнда (из инспектора объектов, либо выделив бэнд и нажав Ctrl+Enter).
Вызвать скрипт страницы отчета можно, вызвав редактор свойства OnBeforePrint страницы (для этого надо щелкнуть на пустом месте страницы и вызвать редактор из инспектора объектов).
Диалоговая форма, как и страница отчета, имеет скрипт - свойство OnActivate.
Скрипт остальных объектов может быть вызван через их свойство Memo либо при нажатии Ctrl+Enter.
В скрипте можно использовать свойства и методы объектов отчета, различные константы. Также можно создавать переменные и массивы, которые будут доступны во всем отчете. Кроме того, можно использовать процедуры и функции.
Переменную описывать не надо, она имеет тип Variant. В имени переменной можно использовать латинские буквы, цифры и знак подчеркивания. Переменную из скрипта можно использовать в объектах, и наоборот, переменную из списка переменных можно использовать в скрипте. Можно обращаться к переменным, определенным в словаре данных, к системным переменным, а также пользовательским переменным. При этом переменные могут содержать в имени недопустимые с точки зрения синтаксиса символы (например, системная переменная Page#). Обращаться к таким переменным следует с использованием квадратных скобок:
begin
a := [Page#];
end
Массивы
В скрипте, помимо переменных, можно создавать массивы. Массивы могут
быть только одномерными, но можно организовать доступ к элементам массива
таким образом, что можно трактовать массив как двумерный или с большим
количеством измерений.
Пример использования массива:
begin
MyArr[0] := 'a'; MyArr[1] := 'b'; MyArr[3] := 'd';
MyArr[2] := MyArr[0] + MyArr[1] + 'c' + MyArr[3];
end;
Т.е. в вышеприведенном примере мы получим:
Arr_MyArr_0 := 'a'
Arr_MyArr_1 := 'b'
Arr_MyArr_2 := 'abcd'
Arr_MyArr_3 := 'd'
В скрипте можно использовать константы. Простейший пример — использование числовых, строковых и логических констант:
begin
a := 0;
b := 'abcd';
c := True;
d := 'That''s all!';
end;
Обратите внимание на использование одинарной кавычки внутри строковой константы - как и в Pascal, ее надо дублировать: d := 'That''s all!'.
Кроме простых констант, в скрипте доступны константы - названия цветов, стилей шрифта и пр. Вот список констант, которые можно использовать:
* цвета: clWhite, clBlack и т.п. - все стандартные цвета + системные цвета;
* результат работы диалогового окна: mrNone, mrOk, mrCancel;
* служебные: CRLF, Null;
* стиль шрифта: fsBold, fsItalic, fsUnderline;
* рамка объекта: frftNone, frftRight, frftBottom, frftLeft, frftTop;
* выравнивание текста в объекте "Текст": frtaLeft, frtaRight, frtaCenter, frtaVertical, frtaMiddle, frtaDown;
* выравнивание по бэнду: baNone, baLeft, baRight, baCenter, baWidth, baBottom.
Кроме того, определены константы для подключаемых объектов, например, csCheck для объекта "CheckBoxObject". Все, что можно видеть в выпадающих списках свойств в инспекторе объектов, можно использовать как константу в скрипте.
В скрипте можно обращаться к свойствам и методам объектов отчета. К объектам отчета относятся визуальные объекты, элементы управления, бэнды, страницы отчета, сам отчет. Для обращения к объекту применяется точечная нотация, например: Memo1.Text. Для обращения к собственным свойствам или методам точечная нотация необязательна.
Свойства, к которым возможно обращение, отображены в инспекторе объектов. К некоторым комплексным свойствам (например, Font) возможно обращение как к Font.Name, Font.Size и т.п.:
begin
Memo1.Font.Name := 'Courier New';
Memo1.Font.Size := 10;
Memo1.Font.Color := clRed;
Memo1.Font.Style := fsBold + fsItalic
end;
К свойствам типа TStrings (Memо, Items и пр.) возможен доступ по индексу:
if Memo1.Lines[1] = 'a' then
Memo1.Lines[1] := 'b'
Также к таким свойствам могут применяться операции Add, Delete, Clear и Count:
if Memo1.Lines.Count > 10 then
Memo1.Lines.Delete(10)
else
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('a');
end;
Следует отметить, что обращение к несуществующему методу или свойству не приведет к сообщению об ошибке. Поэтому следует быть осторожным при написании кода.
Использование процедур и функций
В скрипте могут содержаться вызовы процедур и функций (см. раздел Описание встроенных процедур и функций, а также свойств и методов источников данных на стр. 65.).
При обращении к процедуре или функции нельзя ставить пробел между именем
процедуры и открывающей скобкой.
В скрипте можно выполнить любые модификации объекта (либо объектов) - например, изменение размеров, цвета, содержимого и пр. Следует учесть, что объекты, которые уже обработаны, модифицированы быть не могут. То есть, попытка из объекта, лежащего на бэнде report summary, изменить содержимое объекта из report title, ни к чему не приведет. Однако, сделав отчет двухпроходным, мы сможем выполнить такую модификацию.
Аналогичным образом обстоят дела в случае многостраничного отчета. Мы можем обращаться к любому объекту по его имени (имя в пределах отчета уникально). Но модифицированы могут быть только объекты, которые еще не обрабатывались. Если все же требуется модификация уже обработанного объекта, следует сделать отчет двухпроходным.
<< 1.8 Диалоговые формы | Оглавление | 1.10 Описание встроенных процедур и функций, а также свойств и методов источников данных >> |
![]() | ||
![]() | ||
© ООО "Кигли", 2002-2004 |