В этой статье хотел бы поговорить о интерпретаторе MS ScriptControl. Немного поговорим о нем, то есть немного теории. В своих проектах, некоторые пользователи хотят использовать какой-нибудь другой язык программирования, например, JavaScript, VBScript, Perl и многие другие, так вот, на помощь, в данном случае, приходит MS ScriptControl. Данный интерпретатор, устанавливается, как ActiveX-компонент. В данный статье, мы рассмотрим, как установить данный компонент и как работать с ним, то есть попробуем выполнить через него простейшую JavaScript-функцию, так как я в JavaScript не силен, то мы рассмотрим функцию суммирования 2-х чисел, ну а чтобы попробовать более серьезное, необходимо будем искать или писать самому функцию. Вообще, многие выполняют JavaScript через TWebbrowser, а уже потом забирают данные, возвращаемые тем или иным скриптом. На самом деле, выполнять JavaScript в Delphi, можно не используя данный компонент, а через создания OLE-объекта, но будет использоваться все тот же интерпретатор.

Ну, а теперь давайте приступим к установке данного компонента. Выполним команду Component-ImportComponent (IDE Delphi XE), после чего появляется окно:


Здесь, мы выбираем Import ActiveX Control и жмем Next>>.


Здесь, выбираем библиотеку ActiveX — Microsoft Script Control 1.0. Нажимаем кнопку Next>> и в появившемся окне необходимо выставить галочку Generate Component Wrappers.


Ну и наконец-то, нажимаем кнопку Next>> и в следующем окне, нажимаем Finish.

Далее, устанавливаем компонент на форму. На форме у меня следующие компоненты:

  • TMemo
  • TScriptControl
  • TButton

Теперь немного поговорим о свойствах и методах, компонента TSciptControl.

Свойства:

  • Language:String — задается язык, интерпретатор, который и будет выполнять, реализовывать. В стандартной установки, доступны JavaScript и VBScript.
  • TimeOut:Integer — задается время выполнения скрипта, если в течение данного времени, скрипт не будет выполнен, то произойдет генерирование ошибки, если присвоить значение 1, то скрипт будет выполняться неограниченное время.
  • UseSafeSubset:Boolean — если значение данного свойства равно True, то интерпретатор будет выполнять ограниченный набор действий, при выполнение скрипта, которые заданы в настройках Вашей системы.

Ну с основными свойствами разобрались, теперь приступаем к основным методам:

Методы:

  • procedure AddCode — добавляет код языка, который в дальнейшем можно выполнить при помощи метода Run.
  • function Eval — выполняет код, который задан в параметре и сразу же возвращает результат, то есть нет необходимо добавлять перед этим код на выполнение, указывается сразу в параметре.
  • procedure AddObject — добавляет OLE-объект
  • function Run — выполняет код, который был добавлен при помощь процедуры AddCode. В параметрах данной функции, указывается имя функции, которую необходимо выполнить, а также список параметров, передаваемые в данную функцию, если имеется такая необходимость.
  • procedure Reset — думаю сильно объяснять тут не надо. Сбрасывает все настройки, коды и так далее, установленные в данном компоненте ранее.

Ну, что теперь давайте вернемся в наш проект и выполним простую JavaScript-функцию. На событие OnClick нашей кнопки, я написал следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
 pPar:PSafeArray;
 varr,res:Variant;
begin
  try
    ScriptControl1.Language := 'JavaScript';
    ScriptControl1.AddCode(Memo1.Text);
    varr:=VarArrayCreate([0, 1], varVariant);
    varr[0]:=1;
    varr[1]:=5;
    pPar:=PSafeArray(TVarData(varr).VArray);
    res:=ScriptControl1.Run('sum',pPar);
    ShowMessage(IntToStr(res));
  finally
 
  end;
end;

При помощь процедуры AddCode, мы добавляем код JavaScript на исполнение, который находится в TMemo, так вот следующий код JavaScript-функции, который я добавил в компонент TMemo (как и говорил, простая функция суммирования двух чисел):

function sum(b,c) {
        a = b+c;
return a;
}

Ничего сложно тут нету, задаем язык скрипта, добавляем код на исполнение, создаем список параметров, ну и в самом конце, выполняем нашу функцию, указывая имя функции и список параметров. Для того, чтобы использовать тип PsafeArray, не забудьте подключить модуль в usesActiveX.

Ну и напоследок, давайте рассмотрим выполнение кода, без предварительного его добавления, для этого нам потребуется функция Eval.

procedure TForm1.Button2Click(Sender: TObject);
begin
   ScriptControl1.Language:='JavaScript';
   ShowMessage(ScriptControl1.Eval('1+5'));
end;

Как видите, ничего сложного нету.

Исходник, можно скачать тут


Многие интересуются где можно купить программу фотошоп и ищут в нужный ресурс в сети. Я думою, что купив программу ты будешь знать, что она полностью рабочая.


Метки: , , , , , ,




К записи “MS ScriptControl в Delphi” оставлено комментариев: 5.

  1. @DelphiKingdom:

    Посмотрите Использование Microsoft ScriptControl. Анатолий Тенцер — там уже все разобрано до мелочей.

  2. fox1k:

    Подскажите а реально запихнуть нечто подобное в ScriptControl:
    for (i=1;i>4;i++){
    c=i;}
    if (b>c)
    {
    a=b+b+b+b+b+b+c+c+c+c+c+c;
    }
    return a;
    }
    что бы работало нормально?
    p.s. пишу дипломную(интерпритатор opengl es2.0) так как языки похожи хочу обмануть как говорится систему
    заранее спасибо!

Оставить комментарий

Вы можете использовать следующие теги:

*