请教如何在ACTIVEFORM的OCX中取得浏览器传来的参数(100分)

  • 主题发起人 主题发起人 dhpmail
  • 开始时间 开始时间
D

dhpmail

Unregistered / Unconfirmed
GUEST, unregistred user!
我用C++BUILDER(DELPHI一样)做了一个ACTIVEFORM,编译为OCX文件,
发布到网页上,因为ACTIVFORM比较复杂,想启动OCX时从外界传些参数到
OCX控件中,单在OCX控件如何取得这些参数,随便问一下,
有哪些传参数的方法?
 
关注,应该是Script呀,OCX里做几个方法。
 
从网页里可以得到OCX中的事件或调用OCX中的函数。

在VC里是这样的,idl文件中声明一段函数,
interface IXXXXX : IDispatch
{
[id(1), helpstring("method start")] HRESULT start();
[id(2), helpstring("method message")] HRESULT message(BSTR msg);
[propget, id(3), helpstring("property bstrType")] HRESULT bstrType([out, retval] BSTR *pVal);
[propput, id(3), helpstring("property bstrType")] HRESULT bstrType([in] BSTR newVal);

}

(该IDL不完整,还需要其他接口)
这样就可以声明出两个函数,和一个属性。
在HTML文件里就可以这样写:
XXXXX(你的OCX的名字id).start()
(javascript);
XXXXX.message("hello!");
XXXXX.bstrType="LIST";

就可以传送内容给ocx了。

传出是用事件。
不知道在BCB里是怎样写的。
 
用view->type liberary打开,然后添加所需的属性方法就可以了,
调用时使用<PARAM NAME="paramname" VALUE="paramvalue">加在object语句后,
也可以使用SCRIPT调用(最好VBSCRIPT)。

 
cytown:你好
我对type library 不是很熟,能否给我详细点的资料,最好是带个例子,thank you.
 
呵呵,例子没法在这里给,不过DELPHI带的离子中有ACTIVEX的用法,虽然
不是ACTIVEFORM,不过在TYPE LIBRARY的使用中是一样的。完全可以参考。
 
我看了一下delphi3里面的activeXform:

先在wizard里面生成了一个ActiveXForm,
在form上放上一个Edit;
在type library里面给IActiveXForm加上一个Method:
set_edit(const Value :WideString);

则TLB文件中自动加上如下声明:
IActiveFormX = interface(IDispatch)
['{71851A92-3D60-47ED-B13E-06986C312026}']
......
procedure set_edit(const Value: WideString)
safecall;
......


procedure TActiveFormX.set_edit(const Value: WideString);
begin
CreateControl;
FIntf.set_edit(Value);
end;

在.pas文件中生成
procedure TActiveFormX.set_edit(const Value: WideString);
begin
edit1.Text:=value
//加上此句即可。
end;

以上的例子是method,用property也是一样的。

在HTML里这样写:
&HTML&gt
&ltSCRIPT language="VBScript"&gt
Sub some_name
XXX.Set_Edit("haha .. Butterfly in the sky!");
End Sub
&lt/Script&gt

&ltBODY&gt
&ltOBJECT classid=CLSID:71851A92-3D60-47ED-B13E-06986C312026
id=XXX &gt&lt/OBJECT&gt
&lt/BODY&gt
&ltHTML&gt

 
to: 曹 :手工写的话需要修改_TBL文件,非常复杂,还是TYPE LIBERARY最省事了。
 
to cytown:
是啊,我就是用type library的。 :)
to dhpmail:
增加完了method之后,记得register!
 
可能cytown误会我的意思了。
我没有手工改_TLB文件,我上面贴的代码除了带注释的那句,其它都是
type library自动生成的。

to dhpmail:推荐,还是先看一两本微软的书,才会知道到底ActiveX的接口是怎样的,
需要加method还是property.终究是微软的东东。
 
to 曹晓钢:
多谢指导,但按你的例子,VBScript中的方法没有执行,不知什么原因,
NT上只安装了IIS,是否要装其他?
 
建议你使用<a href="http://msdn.microsoft.com/workshop/misc/cpad/setuppad.exe">Active Control Pad</a>做测试, 很好用.
 
ActiveX Control Test container在VC安装时会自带。
cytown说的没错,先在Test Container中测试过了再放到网页中运行。
运行时和IIS没有关系,直接打开HTM文件就可以了。

如果在TestContainner中正常,在HTML中不幸,
还要注意,给ActiveX发消息时,一定要确保ActiveX已经装载了才可以成功。

 
在IActivexform接口里加了一个value属性,

delphi自动在TLB文件中生成
property value: WideString read Get_value write Set_value;

在testactiveform.pas中生成
function TtestActiveFormX.Get_value: WideString;
begin

end;

procedure TtestActiveFormX.Set_value(const Value: WideString);
begin

end;
我不知道用这两个过程或函数如何读入客户程序传递的参数。

同时也不知道在HTML程序中如何向Itestactiveform接口传递参数。
因为我无法在HTML程序里定义一个Itestactiveform,并给他的属性
付值。

请大家指点一二,不胜感激。
谢谢!
 
接受答案了.
 

Similar threads

后退
顶部