很久没更新了,发一个delphi的

关于delphi中开发activex控件,并从activex控件中调用html页面中的javascript。

这几天在搞个需要activex控件来实现的项目,丫丫的activex控件应该属于都快被人遗忘的技术了。

delphi中开发activex控件其实挺简单的,唯一的问题就是怎么调用页面中的javascript呢。

搜了n久发现一个c++写的通过接口调用方法,看上去贼复杂。

其实delphi中调用页面上的javascript贼简单。

方法如下:
1.创建一个方法->SetDoc->procedure SetDoc(const Doc: IUnknown); safecall;

用了一个IUnknown类型.

2.就一句话将IUnknown转成IHTMLDocument2->代码如下:
procedure TCxty_Lib.SetDoc(const Doc: IUnknown);
begin
  if Assigned(Doc) then
  begin
    HTMLDoc := IHTMLDocument2(Doc as IHTMLDocument);
  end;
end;

注意前头要申明一个 HTMLDoc ,是IhtmlDocument2类型,我申明在 private 中.

3.就是写一个调用javascript的方法咯,代码如下:
procedure TCxty_Lib.CallJavascript(script: string);
var
  win: IHTMLWindow2;
begin
  if not Assigned(HTMLDoc) then
    Exit;

  win := HTMLDoc.parentWindow;
  if not Assigned(win) then
    Exit;

  win.execScript(script, 'JavaScript');
end;

delphi部分就已完成.

贼简单吧,还没完重要的在html页面上,代码如下:
创建OBJECT
<OBJECT
      classid="clsid:C15DFE4C-B668-4178-A64B-3945365725F2"
      codebase="Cxty_LibProj1.ocx#version=1,0,0,0"
      width=0
      height=0
      align=center
      hspace=0
      vspace=0
      id="Cxty"
>
</OBJECT>

<SCRIPT LANGUAGE="JavaScript">
var Yannyo_Net = document.getElementById('Yannyo_Net');

Yannyo_Net.SetDoc(document);//这句就吧页面上的document传给了activex,然后activex就为所欲为了.
</SCRIPT>

activex中调用脚本的时候只需调用 CallJavascript('javascript函数名称(参数)');

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 2 | 引用: 0 | 查看次数: 1363
  • 1
cxty [2009-09-28 02:51 PM]
哦?不会吧,我的程序都用的好好的呀,是不是你的哪有问题呢?
suncathay [2009-09-24 10:00 AM]
大哥,你调试过么?好像有问题啊
  • 1
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭