unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, BASE_PARSER, PaxScripter, PaxPascal;
type
TMyClass = class(TPersistent)
private
f: String;
public
constructor Create(const s: String);
published
property P: String read f write f;
end;
TDynaArrInt = array of Integer;
TDynaArrMyClass = array of TMyClass;
TForm1 = class(TForm)
PaxScripter1: TPaxScripter;
PaxPascal1: TPaxPascal;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure PaxScripter1AssignScript(Sender: TPaxScripter);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
A: TDynaArrInt;
B: TDynaArrMyClass;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
PaxScripter1.Run;
ShowMessage(IntToStr(A[3]));
ShowMessage(B[2].P);
ShowMessage(B[3].P);
end;
procedure TForm1.PaxScripter1AssignScript(Sender: TPaxScripter);
begin
PaxScripter1.AddModule('1', 'paxPascal');
PaxScripter1.AddCode('1', 'var x, y: TDynaArrInt;');
PaxScripter1.AddCode('1', 'var z: array of Integer;');
PaxScripter1.AddCode('1', 'print B[2].P;');
PaxScripter1.AddCode('1', 'B[2].P := "pqr";');
PaxScripter1.AddCode('1', 'B[3] := TMyClass.Create("xyz");');
PaxScripter1.AddCode('1', 'SetLength(z, 5);');
PaxScripter1.AddCode('1', 'z[3] := 5;');
PaxScripter1.AddCode('1', 'print z[3];');
PaxScripter1.AddCode('1', 'SetLength(x, 10);');
PaxScripter1.AddCode('1', 'x[5] := 8;');
PaxScripter1.AddCode('1', 'y := Test(x);');
PaxScripter1.AddCode('1', 'print y[2];');
PaxScripter1.AddCode('1', 'print x[5];');
PaxScripter1.AddCode('1', 'print Length(x);');
PaxScripter1.AddCode('1', 'print A[3];');
PaxScripter1.AddCode('1', 'A[3] := 88;');
end;
function Test(P: TDynaArrInt): TDynaArrInt;
begin
ShowMessage(IntToStr(P[5]));
SetLength(result, 20);
result[2] := 123;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(A, 15);
A[3] := 77;
SetLength(B, 15);
B[2] := TMyClass.Create('abc');
PaxScripter1.RegisterVariable('A', 'TDynaArrInt', @A);
PaxScripter1.RegisterVariable('B', 'TDynaArrMyClass', @B);
end;
constructor TMyClass.Create(const s: String);
begin
f := s;
end;
initialization
RegisterClassType(TMyClass);
RegisterMethod(TMyClass, 'constructor Create(const s: String);', @TMyClass.Create);
RegisterDynamicArrayType('TDynaArrInt', 'Integer');
RegisterDynamicArrayType('TDynaArrMyClass', 'TMyClass');
RegisterRoutine('function Test(P: TDynaArrInt): TDynaArrInt;', @Test);
end.