JavaScript エンジンです。
[Javascript engine for delphi based on spidermonkey]
http://code.google.com/p/delphi-javascript/
SpiderMonkey ベースで、JavaScript 1.8.5 相当 (Firefox 17 に搭載されているものと同等) です。XE2 以降で動作します。
何はともあれ最小限のデモアプリを作ってみます。フォームに Memo と Button を貼って、以下のようなコードを記述します。
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, js15decl, jsintf, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private 宣言 } FJSEngine: TJSEngine; end;
var Form1: TForm1;
implementation
uses RTTI, typinfo;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin FJSEngine := TJSEngine.Create; TJSClass.CreateJSObject(Self, FJSEngine, 'MainForm', [cfaInheritedMethods, cfaInheritedProperties]); FJSEngine.EvaluateFile('test.js'); FJSEngine.CallFunction('main'); end;
procedure TForm1.FormDestroy(Sender: TObject); begin FJSEngine.Free; end; end.
んで、以下のような test.js を用意します。
function Button1Click(Sender) { MainForm.Memo1.Lines.Add('Click!'); }
function main() { MainForm.Button1.OnClick = Button1Click; }
Delphi では Button のイベントハンドラを記述していませんが、Button を押すと Memo には "Click!" が表示されます…面白いですね。
逆に Delphi 側で実装したメソッドを JavaScript 側から呼び出す事もできます。使用方法についての詳細なドキュメントはありませんが、付属のデモをコンパイルしてみると大体解ると思います。
See Also:
[SpiderMonkey]
https://developer.mozilla.org/en-US/docs/SpiderMonkey
[Spider Monkey (DocWiki)]
http://ja.wikipedia.org/wiki/SpiderMonkey
|