* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Расширение интерпретатора выражений
19 февраля 2009

Построитель интерпретатора выражений также может быть расширен для ваших собственных функций. В действительности, все функции интерпретатора выражений реализованы, как add on функции, полностью отсутствуют какие либо функции внутри кода интерпретатора. Создание дополнительных функций состоит из двух шагов:
• Написать функцию класс, наследник от TQREvElementFunction
• Зарегистрировать функцию
Имеется два базовых типа add on функций простые функции и агрегатные функции. Оба типа функций могут быть с параметрами или без. Функции также могут получать переменное число параметров.
Примеры различных типов функций:
Simple without parameters Time
Simple with parameters Str(<numeric>)
Aggregated without parameters Count
Aggregated with parameters Sum(<numeric>)

Простые функции
Наиболее просто реализовать простую функцию, наследовать ее от TQREvElement (предок всех функций) и перекрыть функцию Calculate. Функция Calculate обязана возвращать, хоть какой ни будь результат. Реализация функции Time выглядит следующим образом:
TQREvTimeFunction = class(TQREvElementFunction)
public
function Calculate : TQREvResult; override;
end;
function TQREvTimeFunction.Calculate : TQREvResult;
begin
Result.Kind := resString;
Result.StrResult := TimeToStr(Now);
end;
Поскольку функция Time не может иметь ни одного параметра, то мы добавим проверку данного факта, и теперь реализация будет выглядеть так:
TQREvTimeFunction = class(TQREvElementFunction)
public
function Calculate : TQREvResult; override;
end;

function TQREvTimeFunction.Calculate : TQREvResult;
begin
if ArgList.Count = 0 then begin
Result.Kind := resString;
Result.StrResult := TimeToStr(Now); end
else
Result.Kind := resError;
end;
Переменная ArgList.Count содержит действительное количество параметров, которые были переданы в функцию. Доступ до параметров делается с помощью функции Arguments.


Теги: Borland Delphi

Статьи по теме:

Неблокирующий режим
PhysicalRecNo
Storage
Пространства имен
Добавление печатных компонент к отчету
Свойство PaperSizeSupported
SearchKey
Свойство AlignToBottom
DbfFile
Панель Spacing
Конструкция IF-ELSE
InitFieldDefsFromFields
Чтение сообщений
Электронная доска объявлений
LanguageStr
| Borland Delphi | ext |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30


     



Данный сайт или домен продается

© 2009 Seoliga.ru | Borland Delphi | Расширение интерпретатора выражений. Регион сайта: Москва и Санкт-Петербург