昔PPAっていうDelphi内でPascalスクリプトが使えるのがあったのですがかなり古いので
同じようにDelphi内で使えるスクリプトって何かありますか?
返り値だけでなくスクリプト内でDelphiプロパティに干渉できるようなのが良いのですが
DelphiXE5以降で動けばと思います
FastReportには、FastScriptが搭載されているようです。(ただし、Standard Edition以上)
なお、FastScript単体でも発売されては、いるみたいですね。
FastScript を使用してアプリにスクリプト機能を実装 - Mr.XRAY<
http://mrxray.on.coocan.jp/Delphi/Others/FastScript.htm
情報ありがとうございます
使用しているDelphiがProfessionalエディションなので
残念ながらFastScriptは入っていませんでした
フリーソフト用なので何かを購入して対応というのは厳しいです
ループと条件分岐と変数管理を自作したとしても
せめて1行分の計算式を実行して値を得る方法があればいいかなと思います
検索してみたところ、RemObjects Pascal Script というのもあるみたいですね。
(使ったことはないのですが・・)
Windows 7 の環境で Delphi 2010 に RemObjects Pascal Script をインストールしてみる
https://blog.dreamhive.co.jp/yama/3439.html
RemObjects PascalScriptを試す
https://tokibito.hatenablog.com/entry/20100111/1263151508
1行の計算式(eval)であれば、Jun HOSOKAWA様のサイトに解説がありますね。
https://qiita.com/pik/items/e888e52b4fa2f70a419f
外していたらすいません。
uses System.Bindings.Helper,System.Bindings.Expression;
procedure TForm1.Button1Click(Sender: TObject);
var be : TBindingExpression;
begin
Edit1.Text:='24*3+1';
be := TBindings.CreateExpression([], Edit1.Text);
try
Memo1.Lines.Add(be.Evaluate.GetValue.AsExtended.ToString);
finally
be.Free;
end;
end;
igy 様
初耳でしたがInno Setupのスクリプトエンジンに使われているのなら使いやすそうですね
実行時に中間ファイルのようなものを作成するので
管理者権限に引っかかるという情報もありますが
※Inno Setupでも似たような現象は発生している
mam 様
これはすばらしい情報をありがとうございます!
式をオブジェクトにバインドできるので理想通りです
頂いた情報でいろいろ試したいと思います
それにしても情報少ないですね・・・
用途に合うのか不明ですがこんなのもあるようです
https://www.delphitools.info/dwscript/
au様ありがとうございます、これも使えそうですね
言葉足らずでしたが 「情報が少ない」は
教えていただいたライブラリを検索したときの結果のことです
それぞれ使ってみて使えそうなら採用させていただきたいと思います
Microsoft ScriptControl でも式評価できます。sin,log,expなども使えるようです。
---------------------
uses comobj;
procedure TForm1.Button1Click(Sender: TObject);
var
SC: OleVariant;
begin
try
SC := CreateOleObject('ScriptControl');
except
on EOleSysError do
begin
Messagedlg('ScriptControlを起動できませんでした.', mterror, [mbok], 0);
Exit;
end ;
end ;
try
SC.Language := 'VBScript';
SC.AllowUI := False;
Label1.Caption := SC.Eval(Edit1.Text); //label= -1+2.0*sin(3.141592/3)+log(0.5)+exp(0.2)
SC.Reset;
finally
SC := Unassigned;
end ;
end;
うぉれす様 ありがとうございます
試しに実行したところ何もインストールしていない状態でも
Microsoft ScriptControl を呼び出せているようです
インストールなしで式評価が出来るならこれが最有力候補になりそうです
EXCEL入っているならEXCELオブジェクトに計算させる。
EXCELで使える関数は何でも使えるのが利点。
---
uses ComObj は要るかも。。
var
ExcelApp, WorkSheet: Variant;
//--------------
function CalculateFormula(AFormula: string): Variant;
begin
WorkSheet.Cells[1, 1].Formula := AFormula;
Result := WorkSheet.Cells[1, 1].Value;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
res: Variant;
begin
res := CalculateFormula('=2*ln(2.718281828)+pi()/2 + Fact(10)');
Memo1.Lines.Add(res);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ExcelApp := CreateOLEObject('Excel.Application');
ExcelApp.DisplayAlerts := False;
ExcelApp.WorkBooks.Add;
WorkSheet := ExcelApp.ActiveWorkBook.ActiveSheet;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ExcelApp.Quit;
end;
ツイート | ![]() |