TPaxScripter Demo. Dynamic Arrays.


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.


Copyright © 1999-2006 VIRT Laboratory. All rights reserved.