在javascript中eval函数可以分析字符串,并将其作为javascript语句进行执行,
如执行eval("button1.value='abc'")就相当于执行button1.value='abc'
那么,请问在delphi中有没有类似的函数,可以分析该字符串,并将其作为delphi的语句进行执行?
如果有知道的朋友,请跟贴,或者mail给我[email protected],或者请到http://www.YouthFly.com论坛中的delphi论坛里帮助回答,十分感谢!!!

解决方案 »

  1.   

    Delphi 好象没有现成的这样的函数,因为 javascript 和 Delphi 的运行机制完全不同,javascript 是一种解释性的脚本语言,所有的运行都是解释翻译运行着的,而 Delphi 是编译型的语言,所有的任务是编译时已经决定的,所以想叫她完成这样的功能,可能不是很容易。需要自己写代码。
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vScriptControl: OLEVariant;
    begin
      try
        vScriptControl := CreateOleObject('MSScriptControl.ScriptControl');
        vScriptControl.Language := 'VBScript';
        ShowMessage(vScriptControl.Eval(Edit1.Text));
      except
        ShowMessage('不关伴水的事!');
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit.Text := '1+1'; //简单又好记~~
    end;
      

  3.   

    uses ComObj; //不要忘记她~~
      

  4.   

    //再仔细看一会儿,才明白~~//from
    http://zswang.51.net/function/zsfunc0g.htm(*//
    标题:处理窗体代码
    说明:既dfm格式;本函数来源于Delphi帮助
    设计:Zswang
    日期:2002-01-25
    支持:[email protected]
    //*)///////Begin Source
    function ComponentToString(Component: TComponent): string;
    var
      BinStream: TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result := StrStream.DataString;
        finally
          StrStream.Free;
        end;
      finally
        BinStream.Free
      end;
    end; { ComponentToString }function StringToComponent(Value: string; Instance: TComponent): TComponent;
    //如果元件是嵌套形式则必须注册子元件类
    //参考RegisterClasses();UnRegisterClasses()
    var
      StrStream: TStringStream;
      BinStream: TMemoryStream;
    begin
      StrStream := TStringStream.Create(Value);
      try
        BinStream := TMemoryStream.Create;
        try
          ObjectTextToBinary(StrStream, BinStream);
          BinStream.Seek(0, soFromBeginning);
          Result := BinStream.ReadComponent(Instance);
        finally
          BinStream.Free;
        end;
      finally
        StrStream.Free;
      end;
    end; { StringToComponent }
    ///////End Source///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Text := ComponentToString(Edit1);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      StringToComponent(Memo1.Text, Edit1);
    end;
    ///////End Demo