CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

显示窗体

楼主bonniewater(陪你去看海)2005-06-04 16:07:16 在 Delphi / VCL组件开发及应用 提问

我想写一个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

相关问题

  • 显示窗体
  • 窗体显示?
  • 显示窗体
  • 如何显示主窗体?
  • 窗体显示的问题!
  • 问dll中显示窗体
  • 关于窗体显示
  • 窗体显示问题
  • 窗体显示及隐藏?
  • 显示窗体的问题

关键词

得分解答快速导航

  • 帖主:bonniewater

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo