Цитата:
Сообщение от SHIFT999
Понял: "Math." перед функцией и все работает.
|
на самом деле
IScriptControl на много могучее:
Код:
var
ScriptControl: IScriptControl;
begin
CoInitialize(nil);
ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
ScriptControl.Language:='javascript';
// add const
ScriptControl.AddCode('var E = Math.E');
ScriptControl.AddCode('var LN2 = Math.LN2');
ScriptControl.AddCode('var LN10 = Math.LN10');
ScriptControl.AddCode('var LOG2E = Math.LOG2E');
ScriptControl.AddCode('var LOG10E = Math.LOG10E');
ScriptControl.AddCode('var PI = Math.PI');
ScriptControl.AddCode('var SQRT2 = Math.SQRT2');
ScriptControl.AddCode('var SQRT1_2 = Math.SQRT1_2');
// add function
ScriptControl.AddCode('function abs(x){return Math.abs(x)}');
ScriptControl.AddCode('function acos(x){return Math.acos(x)}');
ScriptControl.AddCode('function asin(x){return Math.asin(x)}');
ScriptControl.AddCode('function atan(x){return Math.atan(x)}');
ScriptControl.AddCode('function cos(x){return Math.cos(x)}');
ScriptControl.AddCode('function exp(x){return Math.exp(x)}');
ScriptControl.AddCode('function log(x){return Math.log(x)}');
ScriptControl.AddCode('function pow(x, y){return Math.pow(x, y)}');
ScriptControl.AddCode('function random(){return Math.random()}');
ScriptControl.AddCode('function sin(x){return Math.sin(x)}');
ScriptControl.AddCode('function sqrt(x){return Math.sqrt(x)}');
ScriptControl.AddCode('function tan(x){return Math.tan(x)}');
// meandr - графиком функции является сигнал прямоугольной формы
ScriptControl.AddCode('function meandr(n, x){'
+'var result = 0;'
+'for(var i = 0; i < n; i++){'
+'var a = i * 2 + 1;'
+'result = result + Math.sin(a * x) / a;'
+'}'
+'return result;'
+'}');
// add msg
ScriptControl.AddCode('function alert(msg){var WScriptShell = new ActiveXObject("WScript.Shell"); WScriptShell.Popup(msg, 60, "Script Control")}');
// demo
Memo1.Lines.Add(ScriptControl.Eval('sin(PI/2)'));
Memo1.Lines.Add(ScriptControl.Eval('cos(PI)'));
Memo1.Lines.Add(ScriptControl.Eval('abs(-255)'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
ScriptControl.ExecuteStatement('alert("Hello, Delphi")');
ScriptControl.ExecuteStatement('alert((3+7)*25.5)');
end;
это всего лишь маленькая часть. не говоря уже о том, что его можно заставить работать с VCL элементами Delphi, быть обработчиком событий кнопок и т.д. и т.п. вообщем расширить функционал программы без ее перекомпиляции.