显示窗体
我想写一个Activex,不是要ActivexForm
这个Activex里面的一个函数名为testform
1.我首先这样注册
<OBJECT CLASSID="CLSID:338D575D-DE85-4660-ACB8-5AD105619E7A" CODEBASE="./tt.cab#version=1,0,0,0"></OBJECT>
2.这样调用
<OBJECT ID="test" CLASSID="CLSID:338D575D-DE85-4660-ACB8-5AD105619E7A"></OBJECT>
<script language="javascript">
test.testform();
</script>
3.调用后,我想实现弹出一个单独的窗体的效果,这个窗体是delphi的窗体,不是网页
请指教实现以上效果怎么弄呢,给点代码或思路
谢谢指教!!
问题点数:0、回复次数:18Top
1 楼jms2812405()回复于 2005-06-04 16:17:27 得分 0
在ActivexForm定义一个接口,然后再接口里面写动太创建窗体事件.Top
2 楼bonniewater(陪你去看海)回复于 2005-06-04 16:20:17 得分 0
如果写ActivxForm,那么创建的时候就显示了,不想要这种效果的
谢谢Top
3 楼Raptor(猛禽)回复于 2005-06-06 10:33:39 得分 0
创建一个DLL类型的Automation Object,然后在其中动态创建窗体。Top
4 楼bonniewater(陪你去看海)回复于 2005-06-06 10:39:59 得分 0
我想问那我需要不需要创建一个Activex libray了?
请再次指教,谢谢了!Top
5 楼bonniewater(陪你去看海)回复于 2005-06-06 18:15:48 得分 0
老大,成了,不过打包出来的东西是dll,不是ocx
请老大指教!Top
6 楼zhangheaaa(无相)回复于 2005-06-07 09:14:57 得分 0
有两种方式:
一种是利用delphi的active form来生成客户端的界面,由浏览器下载安装,并在客户端运行。(这种方式在开发多后台数据库中,较为常用。在国内许多新版本的财务软件都采用了这种方法,其缺点是对开发人员的要求太高)
另一种是开发一个组件在客户端安装,然后,由服务器端来生成vbscript,或者javascript脚本,在客户端运行、创建相应的组件对象;
Top
7 楼bonniewater(陪你去看海)回复于 2005-06-07 09:37:29 得分 0
activeform是嵌入在HTML页面里的
可能第二种方法是我想要的,能说的详细点吗,谢谢了Top
8 楼Raptor(猛禽)回复于 2005-06-07 09:51:49 得分 0
第二种方法也是一样的,如果不嵌入在HTML页面里显示,就没有自动安装的功能。
>开发一个组件在客户端安装
意思就是另外开发一个ActiveForm的安装程序来安装这个DLL。Top
9 楼CDSoftwareWj(95927)回复于 2005-06-07 11:41:34 得分 0
都说的差不多了Top
10 楼bonniewater(陪你去看海)回复于 2005-06-07 13:38:47 得分 0
创建一个Activex library,然后再创建Automation Object,编译以后为什么是dll,而不是ocx,我想要ocx,怎么能实现呢,谢谢指教!Top
11 楼S.F.(chinasf.cnblogs.com)回复于 2005-06-07 14:11:50 得分 0
打开delphi ,关掉默认工程,选择File->new->Other ,再选择ActiveX -> Active Form ,创建;
这个是dpr的源码;
library ActiveFormProj1;
uses
ComServ,
ActiveFormProj1_TLB in 'ActiveFormProj1_TLB.pas',
ActiveFormImpl1 in 'ActiveFormImpl1.pas' {ActiveFormX: TActiveForm} {ActiveFormX: CoClass};
{$E ocx} //注意,这句指定编译后为ocx后缀...
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
begin
end.
这个就是ocx工程;form要弹开在html中其实很简单,再增加一个form,放一个button到先的那个ActiveForm内,写入
if(form1=nil) then
form1 := TForm1.Create(self);
form1.show;
再建立一个htm页,我用的是frontpage ,插入web组件,选择高级里面的activex,再自定义,寻找 ActiveFormX Control (这个是默认名称),你可以找到这个ocx了;确定即可,运行html页看看吧.
Top
12 楼S.F.(chinasf.cnblogs.com)回复于 2005-06-07 14:19:08 得分 0
再帮你深入一点;
用脚本调用ocx方法...
刚才那工程继续;
菜单view ->Type library
ActiveFormProj1->IActiveFormX下建立一个方法,叫做showForm
在节点上点鼠标右键,选择new->Method
输入名称ShowForm,再点type library 工具栏'刷新'按钮,ok代码出来了;
procedure TActiveFormX.ShowForm; //这个方法是自动建立的
begin
//这个是代码
if(form1=nil) then
form1 := TForm1.Create(self);
form1.Show;
end;
再编译..如果编译不成功表示ocx正在被引用;方法是选择 RUn->Unregister activex server 这个是反注册,再关掉你引用ocx的html页;编译好后再 register activex server
再到html中写入脚本代码;比如:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<p>
<object classid="clsid:7F7A9C34-756F-43D5-90D1-8576327ED431" id="ActiveFormX1">
<param name="Visible" value="0">
<param name="AutoScroll" value="0">
<param name="AutoSize" value="0">
<param name="AxBorderStyle" value="1">
<param name="Caption" value="ActiveFormX">
<param name="Color" value="4278190095">
<param name="Font" value="MS Sans Serif">
<param name="KeyPreview" value="0">
<param name="PixelsPerInch" value="96">
<param name="PrintScale" value="1">
<param name="Scaled" value="-1">
<param name="DropTarget" value="0">
<param name="HelpFile" value>
<param name="ScreenSnap" value="0">
<param name="SnapBuffer" value="10">
<param name="DoubleBuffered" value="0">
<param name="Enabled" value="-1">
</object>
</p>
<button onclick="javascript:ActiveFormX1.ShowForm()">TEST</button>
</body>
</html>
//////////////////
另外,如果你要ocx支持属性页的话,你必须管理几个东西,我忘记了,你可以找找sundog的文章,很详细.Top
13 楼zhlwyy(生活很累,但是因为生活才有意义。)回复于 2005-06-07 14:46:37 得分 0
:)Top
14 楼S.F.(chinasf.cnblogs.com)回复于 2005-06-07 16:38:41 得分 0
不好意思,记错名字了,应该叫做Hubdog,哈哈哈
这个是他的文章,里面不少关于activex的制作
http://hubdog.csdn.net/Hubdog/ActiveX2.htmTop
15 楼bonniewater(陪你去看海)回复于 2005-06-10 09:51:04 得分 0
delphi里面带的unit dir name search path的做用是什么呢?
为什么我装activex的时候,这个要写对?
而且还要重新编译dclusr.dpk,这个干吗用的呢?
谢谢指教!Top
16 楼S.F.(chinasf.cnblogs.com)回复于 2005-06-10 17:03:35 得分 0
??我做的时候没发现你说的 重新编译dclusr.dpk 啊;
你是不是把IDE环境搞乱套了Top
17 楼bonniewater(陪你去看海)回复于 2005-06-10 20:10:58 得分 0
我是作好以后,想把它添加到Activex面板里出现的这个情况Top
18 楼S.F.(chinasf.cnblogs.com)回复于 2005-06-11 01:40:30 得分 0
晕!!
你到delphi 下引入activex的话很容易啊;不需要自己建立packet;
首先注册ActiveX,然后在Delphi的Project菜单上选择import Type Library,这样Delphi列出所有ActiveX ,选择你的ActiveX ,然后Delphi会生成一个类供调用。
Top




