谢谢!!

解决方案 »

  1.   

    Topic in borland.public.delphi.activex.controls.using
    Posted by Martin Kammann Sep 23 2001, 5:04 pm unit Unit1; 
    interface 
    uses 
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
      StdCtrls, OleCtrls, SHDocVw_TLB, Dialogs; 
    type 
      TForm1 = class(TForm) 
        Button1: TButton; 
        Button2: TButton; 
        Wb: TWebBrowser; 
        procedure FormCreate(Sender: TObject); 
        procedure Button1Click(Sender: TObject); 
      private 
        procedure ExecuteScript(); 
      public 
      end; 
    var 
      Form1: TForm1; 
    implementation 
    uses 
      mshtml, ComObj, ActiveX; 
    {$R *.dfm} 
    procedure TForm1.FormCreate(Sender: TObject); 
    begin 
      Wb.Navigate('c:\script.htm'); 
    end; 
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      ExecuteScript; 
    end; 
    procedure TForm1.ExecuteScript; 
    var 
      Doc: IHTMLDocument2; 
      Disp: IDispatch; 
      Member: WideString; 
      TheDispId: Integer; 
      Result: OleVariant; 
      DispParams: TDispParams; 
      VariantArg: TVariantArg; 
      Args: WideString; 
    begin 
      if Supports(Wb.Document, IHTMLDocument2, Doc) 
      then begin 
        Disp := (Doc as IHTMLDocument).Script; 
        if Assigned(Disp) 
        then begin 
          Member := 'Test'; 
          if (Disp.GetIDsOfNames(GUID_NULL, @Member, 1, 
               LOCALE_SYSTEM_DEFAULT, @TheDispId)) = S_OK 
          then begin 
            FillChar(DispParams, SizeOf(DispParams), 0); 
            FillChar(VariantArg, SizeOf(VariantArg), 0); 
            DispParams.cArgs := 1; // 1 argument 
            DispParams.rgvarg := @VariantArg; 
            VariantArg.vt := VT_BSTR; 
            Args := '5+Math.sin(9)'; 
            VariantArg.bstrVal := pointer(Args); 
            OleCheck(Disp.Invoke(TheDispId, GUID_NULL, 0, DISPATCH_METHOD, 
              DispParams, @Result, nil, nil)); 
            ShowMessage(VarToStr(Result)); 
          end; 
        end; 
      end; 
    end; 
    end. 
    HTML page (script.htm): 
    <HTML> 
      <HEAD> 
        <TITLE>Evaluate</TITLE> 
        <SCRIPT> 
          function Test(x) 
          { 
             alert(eval(x)); 
             return eval(x); 
          } 
       </SCRIPT> 
      </HEAD> 
      <BODY> 
      <H1>Script Test</H1> 
      </BODY> 
    </HTML> 
      

  2.   

    如果 javascript Test(x) 有2个参数,这段代码有怎样写?
            FillChar(DispParams, SizeOf(DispParams), 0); 
            FillChar(VariantArg, SizeOf(VariantArg), 0); 
            DispParams.cArgs := 1; // 1 argument 
            DispParams.rgvarg := @VariantArg; 
            VariantArg.vt := VT_BSTR; 
            Args := '5+Math.sin(9)'; 
            VariantArg.bstrVal := pointer(Args);