Давно знаком с этими компонентами. И вот снова судьба свела с ними. Это компоненты для выполнения сценариев на языке Pascal.
Здесь их скачать можно: https://github.com/remobjects/pascalscript
Несколько описаний и примеров работы.
http://wiki.freepascal.org/Pascal_Script
http://www.foxbase.ru/Delphi-components/remobjects-pascalscript.htm
http://goodbyamerica.sourceforge.net/PS01_rus.html
Установились на Lazarus без проблем (1.0.8).
Вкрадце как использовать.
В Uses добавить uPSComponent, uPSRuntime.
var
Script: TPSScript;
begin
Script := TPSScript.Create(nil);
Script.OnCompile := OnCompileScript;
Script.OnExecute := OnExecuteScript;
Script.Script.Text := 'begin end.';
if not Script.Compile then
begin // не скомпилировалось
if Script.CompilerMessageCount > 0 then
for i := 0 to Script.CompilerMessageCount - 1 do
ShowMessage(Script.CompilerErrorToStr(i));
end
else begin
Script.Execute;
end;
procedure TForm1.OnCompileScript(Sender: TPSScript);
begin
Sender.AddFunction(@SendLog, 'procedure SendLog(s:string)');
Sender.AddRegisteredVariable('id', 'integer');
Sender.AddMethod(Self, @TMOO.GetDevPropInt,
'function GetDevPropInt(id:integer;key:string;def:integer):integer;');
end;
Byte, Shortint, Word, Smallint, Longword, Longint, Int64, Single, Double, Extended, Variant, String, WideString, Char, WideChar.
В скрипте доступны практически всё что и в Lazarus.
Документации не много - пробуйте.
Можно добавлять классы и формы и еще много чего, но это уже отдельная тема.
Здесь их скачать можно: https://github.com/remobjects/pascalscript
Несколько описаний и примеров работы.
http://wiki.freepascal.org/Pascal_Script
http://www.foxbase.ru/Delphi-components/remobjects-pascalscript.htm
http://goodbyamerica.sourceforge.net/PS01_rus.html
Установились на Lazarus без проблем (1.0.8).
Вкрадце как использовать.
В Uses добавить uPSComponent, uPSRuntime.
var
Script: TPSScript;
begin
Script := TPSScript.Create(nil);
Script.OnCompile := OnCompileScript;
Script.OnExecute := OnExecuteScript;
Script.Script.Text := 'begin end.';
if not Script.Compile then
begin // не скомпилировалось
if Script.CompilerMessageCount > 0 then
for i := 0 to Script.CompilerMessageCount - 1 do
ShowMessage(Script.CompilerErrorToStr(i));
end
else begin
Script.Execute;
end;
end;
procedure TForm1.OnCompileScript(Sender: TPSScript);
begin
Sender.AddFunction(@SendLog, 'procedure SendLog(s:string)');
Sender.AddRegisteredVariable('id', 'integer');
Sender.AddMethod(Self, @TMOO.GetDevPropInt,
'function GetDevPropInt(id:integer;key:string;def:integer):integer;');
end;
procedure TForm1.OnExecuteScript(Sender: TPSScript);
begin
VSetInt(Sender.GetVariable('id'), 234);
end;
Немного поясню. Создаем класс. Определяем два события, они нужны для регистрации функций и переменных (OnCompile) и для передачи значений в скрипт (OnExecute).
В свойство Script передаем текст скрипта.
Метод Compile компилирует скрипт, Execute выполняет то что получилось.
В скрипте можно выполнять методы класса (AddMethod). Можно также выполнять статические функции (AddFunction). Для передачи в скрипт значений нужно выполнить два шага: зарегистрировать сначала переменную и тип (AddRegisteredVariable) а уже в событии OnExecute выполнить присваивание этой переменной значения VSetInt(Sender.GetVariable('id'), 234);.
Скрипт по умолчанию поддерживает следующие типы:
В скрипте доступны практически всё что и в Lazarus.
Документации не много - пробуйте.
Можно добавлять классы и формы и еще много чего, но это уже отдельная тема.
Комментариев нет:
Отправить комментарий