Руководство VisiCAR™ Developer
<< 1.8 Диалоговые формы Оглавление 1.10 Описание встроенных процедур и функций, а также свойств и методов источников данных >>

1.9 Языковые средства

В состав программы входит интерпретатор 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):

Таблица 1.13:  Соответствие типов данных

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