中国开发网: 论坛: Delphi/BCB: 贴子 507754
pcplayer
JavaScript 调用插件的属性
1. 用 Delphi 写一个网页插件;
2. 写页面的 JavaScript 和该插件交互。比如用 JavaScript
向插件输入数据。

1. 在 Delphi IDE 菜单:New / Other 进入要 New
什么项目的选择窗口,选择 AcitveX 页,选择 Active
Form。创建了一个 Acitve Form 新工程。保存它。
1.1. New Active Form
的时候要求命名,这里命名为:JSActiveX.
2. 在这个工程的 Form 上放一个 Edit1: TEdit; 放一个 Label1:
TLabel; 放一个 Btn1: TButton
3. 在 IDE 菜单 View/Type Library,出现 DCOM
接口的定义窗口。在 ITestJS
一节上,鼠标右点,选择菜单:new /
property,然后填入:SayHello。按IDE的保存后,有了个
Property 叫做 SayHello.在代码里 IDE 自动生成了:function
TTestJS.Get_SayHello: WideString; 和 procedure
TTestJS.Set_SayHello(const Value: WideString);

4. 填写代码:
function TTestJS.Get_SayHello: WideString;
begin
Result := Edit1.Text;
end;

procedure TTestJS.Set_SayHello(const Value: WideString);
begin
Edit1.Text := Value;
end;

5. 编译,发布。Delphi 自动生成的 htm 文件大概是:

<HTML>

<H1> Delphi 7 ActiveX Test Page </H1><p>
You should see your Delphi 7 forms or controls embedded in the form
below.
<HR><center><P>
<OBJECT
classid="clsid:632C1FA1-CBF0-4DDE-A66B-548BE1880E56"
codebase="http://LocalHost/JSActiveX/JSActiveX.cab#version=1,0,3,0"
width=350
height=250
align=center
hspace=0
vspace=0

</OBJECT>
</HTML>

6. 手工为该 html 文件增加:

<HTML>

<label>aaa
<input type="text" name="textfield" id="TextBox1">
</label>
<label>sayhello
<input type="submit" name="Submit" value="提交"
onClick="document.JSActivex.SayHello=TextBox1.value">
</label>

注意,代码里的 document.JSActivex 这个 JSActivex
代表我们的那个插件。但是,就这样运行是不行的。因为
Delphi 自动生成的 htm
里没有为这个插件命名。因此,要增加一个
ID="JSActivex" 的项目在 htm 里,变成:

<OBJECT
classid="clsid:632C1FA1-CBF0-4DDE-A66B-548BE1880E56"
id="JSActivex" //<----注意,这行是手工加上去的。
codebase="http://LocalHost/JSActiveX/JSActiveX.cab#version=1,0,3,0"
width=350
height=250
align=center
hspace=0
vspace=0

</OBJECT>

然后,用浏览器访问,在浏览器里可以看到插件。看不到的话,检查路径和浏览器的安全设置。

然后,向页面上的那个文本输入框输入几个字符,那个输入框就是手工加入到
htm 文件里的 id="TextBox1" 那个东西。然后点 htm
上的按钮,触发
onClick="document.JSActivex.SayHello=TextBox1.value"
,可以看到,插件上的那个 Edit1.Text
的确立及变成了在 TextBox1
里面输入的内容,也就是说,JavaScript
通过写那个插件的属性,的确把数据传到插件里去了。

至于插件如果要用事件来通知页面上的
JavaScript,需要在 Type library 的 IJSTestEvents
节上鼠标右点,选择 new/Event,输入 Event
的名字,就让插件拥有了可以让 JavaScript
来用的事件了。具体如何用,还没试。试出来再写试验报告。

重点:
1. Delphi: 在 Active Form 的 Type library 中,为接口
new/property,然后再自动生成的 get/set 方法里写代码;
2. 在 delphi 自动生成的 html 关于插件描述的地方,增加
id="MyForm",这个 id 随便命名。没有这个 id 则无法用
Javascript 通过字符串的代码去调用到这个插件。
3. JS 里读页面文本框的内容,要为页面文本框增加
id="TextBox1"
这样的命名,否则无法读到它的内容。另外,JS
区分大小写,因此,读文本框的内容是: TextBox1.value
而不是 TextBox1.Value.

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录