请教:如何调用webbrowser显示的网页中的函数?? 谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Topic in borland.public.delphi.activex.controls.usingPosted 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> 如果 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); 急帮忙给delphi的一些代码加注释 声卡录音,很简单的那种,通过麦克录音,请问代码是如何实现的? 如何同时调用SQL和EXECL数据 C写的dll中的涵数,转到delphi时,定义出错在哪儿?来者有分 ■如何由整数得到相对应的枚举值■ 用DBEDIT复制表中数据 快来了 超简单 晕:)在线等待 5点 结帐 关于读取文件的问题 使用Label控件,如何将文字的显示方式由横的变为纵的? 关于reportbuilder的纸张大小设定问题 请教ADO+access数据库插入记录问题! 急问一个问题...,与定时器有关
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>
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);