unit WinForm1; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, PaxScript.Net; type TWinForm1 = class(System.Windows.Forms.Form) {$REGION 'Designer Managed Code'} strict private components: System.ComponentModel.IContainer; PaxScripter1: PaxScript.Net.PaxScripter; btnReset: System.Windows.Forms.Button; btnCallMethod: System.Windows.Forms.Button; tbState: System.Windows.Forms.TextBox; lblState: System.Windows.Forms.Label; rtbScript: System.Windows.Forms.RichTextBox; procedure InitializeComponent; procedure btnReset_Click(sender: System.Object; e: System.EventArgs); procedure btnCallMethod_Click(sender: System.Object; e: System.EventArgs); procedure PaxScripter1_OnChangeState(sender: PaxScript.Net.PaxScripter; e: PaxScript.Net.ChangeStateEventArgs); {$ENDREGION} strict protected procedure Dispose(Disposing: Boolean); override; private { Private Declarations } public constructor Create; end; [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm1))] implementation {$REGION 'Windows Form Designer generated code'} procedure TWinForm1.InitializeComponent; begin Self.components := System.ComponentModel.Container.Create; Self.PaxScripter1 := PaxScript.Net.PaxScripter.Create(Self.components); Self.btnReset := System.Windows.Forms.Button.Create; Self.btnCallMethod := System.Windows.Forms.Button.Create; Self.tbState := System.Windows.Forms.TextBox.Create; Self.lblState := System.Windows.Forms.Label.Create; Self.rtbScript := System.Windows.Forms.RichTextBox.Create; Self.SuspendLayout; // // PaxScripter1 // Include(Self.PaxScripter1.OnChangeState, Self.PaxScripter1_OnChangeState); // // btnReset // Self.btnReset.Location := System.Drawing.Point.Create(24, 24); Self.btnReset.Name := 'btnReset'; Self.btnReset.Size := System.Drawing.Size.Create(96, 23); Self.btnReset.TabIndex := 0; Self.btnReset.Text := 'Reset'; Include(Self.btnReset.Click, Self.btnReset_Click); // // btnCallMethod // Self.btnCallMethod.Location := System.Drawing.Point.Create(24, 56); Self.btnCallMethod.Name := 'btnCallMethod'; Self.btnCallMethod.Size := System.Drawing.Size.Create(96, 23); Self.btnCallMethod.TabIndex := 1; Self.btnCallMethod.Text := 'Call Method'; Include(Self.btnCallMethod.Click, Self.btnCallMethod_Click); // // tbState // Self.tbState.Location := System.Drawing.Point.Create(24, 128); Self.tbState.Name := 'tbState'; Self.tbState.TabIndex := 2; Self.tbState.Text := ''; // // lblState // Self.lblState.Location := System.Drawing.Point.Create(24, 96); Self.lblState.Name := 'lblState'; Self.lblState.TabIndex := 3; Self.lblState.Text := 'Scripter state'; // // rtbScript // Self.rtbScript.Location := System.Drawing.Point.Create(152, 16); Self.rtbScript.Name := 'rtbScript'; Self.rtbScript.Size := System.Drawing.Size.Create(304, 144); Self.rtbScript.TabIndex := 4; Self.rtbScript.Text := 'using System;'#10'public class Demo'#10'{'#10#9'public static int X = 0;'#10#9'public static int '+ 'Increase()'#10#9'{'#10#9#9'return ++X;'#10#9'}'#10#9'public static void Main(){}'#10'}'; // // TWinForm1 // Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13); Self.ClientSize := System.Drawing.Size.Create(472, 174); Self.Controls.Add(Self.rtbScript); Self.Controls.Add(Self.lblState); Self.Controls.Add(Self.tbState); Self.Controls.Add(Self.btnCallMethod); Self.Controls.Add(Self.btnReset); Self.Name := 'TWinForm1'; Self.Text := 'CallMethodApp'; Self.ResumeLayout(False); end; {$ENDREGION} procedure TWinForm1.Dispose(Disposing: Boolean); begin if Disposing then begin if Components <> nil then Components.Dispose(); end; inherited Dispose(Disposing); end; constructor TWinForm1.Create; begin inherited Create; InitializeComponent; tbState.Text := 'Init'; end; procedure TWinForm1.PaxScripter1_OnChangeState(sender: PaxScript.Net.PaxScripter; e: PaxScript.Net.ChangeStateEventArgs); begin case e.NewState of ScripterState.Init: tbState.Text := 'Init'; ScripterState.Terminated: tbState.Text := 'Terminated'; end; if e.OldState = ScripterState.Init then begin sender.AddModule('1'); sender.AddCode('1', rtbScript.Text); end else if sender.HasErrors then MessageBox.Show(sender.Error_List[0].Message); end; procedure TWinForm1.btnCallMethod_Click(sender: System.Object; e: System.EventArgs); var result: System.Object; begin result := paxScripter1.Invoke(RunMode.Run, nil, 'Demo.Increase', []); MessageBox.Show('X = ' + result.ToString()); end; procedure TWinForm1.btnReset_Click(sender: System.Object; e: System.EventArgs); begin paxScripter1.Reset(); end; end.