热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

delphi开发activaxform

在CS开发主导的时代,delphi无疑是windows开发的佼佼者,号称vbkiller,随着java和C#的崛起,互联网开发时代来到,delphi也就失去了往日的光环,虽然现在绝

在C/S开发主导的时代,delphi无疑是windows开发的佼佼者,号称 vb killer,随着 java 和 C#的崛起,互联网开发时代来到,delphi也就失去了往日的光环,虽然现在绝大部分项目工作都是java web项目,但众所周知,web应用,要跟硬件打交道,特别是在浏览器中,单纯的jsp或者html、js,都无法实现,由于企业应用开发少不了要与硬件对接,如考勤机(人脸识别或指纹机)、门禁机、PDA(盘点机)等等,要实现在浏览器中对接硬件,其中一个可行方案就是开发IE浏览器下的OCX插件,OCX的本质就是一个C/S程序,可以访问浏览器所在电脑的资源,最常见的就是dll,通过dll操作与电脑相连的硬件。因为delphi太久没用,而ocx插件的开发也不是经常需要,导致每次开发都要翻看 以前的项目或资料重温技术实现,最近又有一个项目,即使用便携式指纹机实现硬件控制集团查看薪金权限,薪资管理员除了有系统功能操作权限外,还需要到人事部登记指纹,领取指纹机,在操作工资相关功能前,进行指纹认证,认证通过才能正常操作系统,趁着这次项目,把ocx开发过程记录下来,以备以后的不时之需,也供其他同行参考。

闲话少说,直入正题,本文提及的项目,使用delphi 7,下面从新建一个ocx项目开始,一步一步指引如何用delph 7开发一个可以在 IE 上运行的OCX插件;

一、插件ACTIVEX工程

1、启动Delphi,点击菜单 File->New->Other:

delphi 开发activaxform

2、选择【ActiveX】标签页,选中Active Form图标:

注:本案例中的OCX插件有用户交互界面,所以使用 ActiveX Form。

delphi 开发activaxform

3、为ActiveX项目和窗体对象命名:

delphi 开发activaxform

由上图可见,只需修改ActiveX窗体名称、窗体实现代码文件名、项目名即可,其他选项默认。

点击【ok】按钮完成项目创建,完成创建后的界面如下图:

delphi 开发activaxform

4、保存项目

点击菜单 File->Save All,在弹出的保存框,选择一个保存的目录,然后一直点击【保存】即可:

delphi 开发activaxform

 至此已完成一个ActiveX项目的创建,可以点击菜单 View->Units浏览delphi创建的相关代码文件:

delphi 开发activaxform

上面三个文件是delphi自动产生的,其概要作用是:

FingerEnrollFormImpl:Ocx的实现类,编写代码基本都在这个文件中进行;

OfficeOcx:项目组织文件,一般不需要手工修改,由delphi自动维护;

OfficeOcx_TLB:OCX类库代码文件,一般也不需要手工修改;

二、设计OCX接口方法

应用程序(本例即浏览器中的js代码)通过OCX提供的接口与OCX进行交互,Delphi会自动为OCX插件创建接口,我们只需跟进实际业务需要,为OCX接口增加相应的方法即可,如本案例需要添加5个接口方法:

InitDevice:链接指纹机;

SetUser:设置当前登记指纹的用户资料;

GetResult:获取指纹登记结果,0 失败,1成功;

GetFinger1:获取已登记的第一枚指纹数据;(每个用户登记两枚指纹,此款指纹机可以将采集的指纹信息转换成字符串,以便存储在数据库中)

GetFinger2:获取已登记的第二枚指纹数据;

下面介绍如何添加接口;

1、点击菜单 View->Type Libraly:

注:Type Libraly 是Delphi中一个很重要的工具,尤其是开发类库这一类的项目,必不可少。

delphi 开发activaxform

2、在弹出的对话框中,右键左边目录树中的delphi 开发activaxform,然后选择 New->Method:

delphi 开发activaxform

3、为新的方法命名为:InitDevice,然后为方法添加参数:

delphi 开发activaxform

4、完成以上操作后,点击菜单栏的刷新图标:

delphi 开发activaxform

刷新后可查看FingerEnrollFormImpl代码中是否已包含此方法:

注:如找不到FingerEnrollFormImpl文件,可以点击菜单 View->Units进行选择并打开;

delphi 开发activaxform

5、重复2-4步骤添加其他方法,下面只列出SetUser方法截图说明,其他方法的创建类似,记得每个方法改名和添加完参数后,要点击刷新图标:

delphi 开发activaxform

5个方法创建后显示如下:

delphi 开发activaxform

delphi 开发activaxform

三、为接口方法添加代码

这一部分是常规的Delphi开发,跟OCX插件开发技术本身并没有直接关系,所以如果使用Delphi开发OCX插件,需要有一定的Delphi开发基础,本案例并不会细谈如何使用delphi进行软件开发,接口方法都是根据实际业务需要进行代码开的,这里只展示OCX窗体界面最终的效果:

delphi 开发activaxform

窗体上有一个特殊的控件:delphi 开发activaxform,这个控件在安装了厂家提供的指纹机驱动程序后,可以导入到Delphi中进行使用,所以非常方便,下面顺带介绍一下如何导入操作系统中已安装的控件:

点击菜单 Component->Import ActiveX Control...:

delphi 开发activaxform

在弹出的对话框中:

delphi 开发activaxform

点击【Install】后,可以在【ActiveX】中看到这个控件:

delphi 开发activaxform

已安装的第三方控件,可以像其他常规控件一下,拖拽到窗体上进行开发,非常方便!

四、编译OCX插件

delphi 开发activaxform

编译之后,在项目代码保存路径下可以看到已生成OCX插件:

delphi 开发activaxform

把这个OCX文件拷贝到web项目下,就可以发布了。

五、发布并访问OCX插件:

 有了以上的OCX文件,就可以将它拷贝到web项目下,在页面中引入并使用它;

本案例为java web项目,服务器环境是tomcat 6和jdk 1.6;

1、将 FtnFingerEnrollForm.ocx 文件拷贝到web项目某目录下,如:

delphi 开发activaxform

注:WebRoot 为web 项目代码根目录;

2、新建一个jsp文件 ocxTest.jsp:

delphi 开发activaxform

注:jsp文件的存放目录没有特别要求,只要tomcat启动后,能通过IE浏览器访问到即可;

jsp文件代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<%@page language="java" cOntentType="text/html;charset=UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://"

        + request.getServerName() + ":" + request.getServerPort()

        + path;

 %>

 

 

 object标签的 classid 值来自delphi项目的 FtnFingerEnrollForm_TLB.pas:

delphi 开发activaxform

codebase属性值为 ocx 文件在 web 项目中的 url,#version=1,0,0,0 为 ocx 控件的版本号,可以在delphi中进行查看:

点击菜单 Project->Options...:

delphi 开发activaxform

3、启动tomcat,在IE中输入jsp文件的url:

delphi 开发activaxform

可见OCX插件被成功加载了;

在IE中加载ActiveX插件,需要做一系列的配置,如果发布到外网使用,可能还需要证书和签名,由于平常的项目都是企业内部的应用系统,所以一般将IE安全级别降低,并将服务器IP设置为信任站点,具体的配置可以百度一下,网上有很多相关资料。

 六、调用OCX接口方法

接下来演示如何在js中调用OCX接口方法,这点很重要,如果js能调用OCX接口方法,就意味着可以在浏览器中操作电脑上的所有资源,这在纯浏览器环境中是做不到的。

1、修改OCX代码

在修改OCX代码之前,需要修改OCX项目的一些属性,由于HTML页面装载OCX插件时需要指定文件版本号,浏览器第一次加载之后,就算OCX代码被修改了,但是版本号没有改,浏览器是不会加载新的OCX插件的。

在Delphi中打开OCX项目,点击菜单 Project->Options...:

delphi 开发activaxform

参照以上红框的选项进行设置,点击【OK】按钮,以后修改代码后,点击 Project->Build FtnFingerEnrollForm时,Delphi会自动为版本号加1,可以右键生成的 FtnFingerEnrollForm.ocx文件进行查看:

delphi 开发activaxform

在Delphi中修改 GetResult 方法,简单的返回一个数值10,返回到jsp的js脚本调用中,如果js能正确显示该数值,证明接口调用成功。

下面是 GetResult 方法代码:

1

2

3

4

function TFingerEnrollForm.GetResult: SYSINT;

begin

  Result:= 10;

end;

2、重新构建OCX项目,点击菜单 Project->Build FtnFingerEnrollForm,将新生成的 FtnFingerEnrollForm.ocx 重新拷到web项目发布目录下,覆盖原来的文件;

3、修改jsp文件,增加一个按钮,点击调用 GetResult 方法,将该方法返回的值 alert 出来:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<%@page language="java" cOntentType="text/html;charset=UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://"

        + request.getServerName() + ":" + request.getServerPort()

        + path;

 %>

 

 


"button" value="test GetResult" Onclick="testGetResult();"/>

 注意 version=1,0,0,4要跟OCX文件的版本号一致;

4、在IE浏览器中验证结果:

delphi 开发activaxform

 

七、OCX控件最终效果测试

delphi 开发activaxform

jsp代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<%@page language="java" cOntentType="text/html;charset=UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://"

        + request.getServerName() + ":" + request.getServerPort()

        + path;

 %>

 

 

"button" value="连接设备" Onclick="initDevice();"/>



工号:"text" value="TX8888" id="userCode"/>

姓名:"text" value="张三" id="userName"/>

部门:"text" value="人事部" id="deptName"/>

公司:"text" value="DMP" id="compName"/>

"button" value="写入用户信息" Onclick="setUser();"/>






"button" value="读取指纹" Onclick="getFinger();"/>



指纹1




指纹2



推荐阅读
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
author-avatar
陶磊2922_502
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有