Показать сообщение отдельно
  #10  
Старый 20.11.2012, 09:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от 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, быть обработчиком событий кнопок и т.д. и т.п. вообщем расширить функционал программы без ее перекомпиляции.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием