中控指纹开发DLEPHI版demo源码

合集下载

中控盘高控盘的指标源代码

中控盘高控盘的指标源代码

中控盘高控盘的指标源代码中控盘高控盘是指在一个系统中,通过对中控板进行控制,实现多个设备的集中控制和管理。

它可以提高系统的智能化程度,减少人工操作,提高系统的效率和安全性。

下面是一个简单的中控盘高控盘的指标源代码示例,用于展示如何实现中控盘高控盘功能。

```python#导入所需的库import random#中控盘类class ControlPanel:def __init__(self):self.devices = [] # 保存所有设备的列表def add_device(self, device):self.devices.append(device)def remove_device(self, device):self.devices.remove(device)for device in self.devices:#设备类class Device:def __init__(self, name): = name#执行命令#创建中控盘对象control_panel = ControlPanel#创建设备对象device1 = Device("设备1")device2 = Device("设备2")device3 = Device("设备3")#将设备添加到中控盘中control_panel.add_device(device1) control_panel.add_device(device2) control_panel.add_device(device3)#控制所有设备执行同一个命令#移除一个设备control_panel.remove_device(device2) #控制剩余设备执行另一个命令#输出所有设备的名称信息print("当前系统的设备列表:")for device in control_panel.devices:print()```以上代码实现了一个简单的中控盘高控盘系统,包括中控盘类和设备类。

车载中控源程序编写

车载中控源程序编写
while(CAN0CTL1_INITAK); /*等待Normal模式确认*/
CAN0CTL0=0x08; /*设置CAN0CTL0*/
CAN0RIER = 0x01; /*打开接收中断,中断的开放在退出初始化的模式下进行*/
CAN0TIER = 0x00; /*关闭发送中断*/
}
void Delay(uint x) /*延时函数*/
CAN0TXTBPR = txpriority; /*设置优先级*/
CAN0TFLG = CAN0TBSEL; /*启动发送*/
return CANTX_OK;
}
/* MSCAN接收程序*/
#define CANRX_OK 0 /*读取成功标志定义*/
#define CAN_EMPTY 2 /*缓冲区为空标志定义*/
}else{
*rxisextend=0;
*rxid=rxidreg>>21; /*转换标准帧ID*/
*rxisdataframe=(rxidreg&0x100000UL)?0:1;
}
if(*rxisdataframe){
*rxlength=CAN0RXDLR_DLC; /*取得数据长度*/
for (j=0;j<*rxlength;j++)
rxdata[j]= *(&CAN0RXDSR0+j); /*取得数据*/
}
CAN0RFLG_RXF = 1; /*释放前台缓冲区*/
return CANRX_OK;
}
/*主程序*/
ulong rxid;
byte rxisextend,rxisdataframe,rxlength;

海凌科指纹模块编程代码

海凌科指纹模块编程代码

海凌科指纹模块编程代码【原创版】目录1.海凌科指纹模块编程代码概述2.海凌科指纹模块编程代码的具体内容3.海凌科指纹模块编程代码的应用领域4.海凌科指纹模块编程代码的发展前景正文一、海凌科指纹模块编程代码概述海凌科指纹模块编程代码是指用于控制和操作海凌科指纹识别模块的一组指令。

海凌科是一家专注于生物识别技术研发和应用的公司,其指纹识别模块被广泛应用于各种场景,如手机解锁、门禁系统等。

通过编程代码,开发者可以实现对海凌科指纹识别模块的控制,以满足不同应用场景的需求。

二、海凌科指纹模块编程代码的具体内容海凌科指纹模块编程代码主要包括以下几个方面:1.初始化:在开始使用指纹识别模块之前,需要对其进行初始化。

初始化过程中,需要设置一些参数,如传感器类型、通信方式等。

2.注册指纹:用户在使用指纹识别功能之前,需要先注册指纹。

注册过程中,用户需要多次录入指纹,以便系统能够准确识别。

3.识别指纹:在实际应用中,用户需要通过指纹识别来实现某些功能,如解锁手机。

此时,开发者需要调用识别指纹的函数,将采集到的指纹信息与已注册的指纹信息进行比对,以判断是否匹配。

4.删除指纹:用户可以随时删除已注册的指纹,以便保护个人隐私。

开发者需要提供相应的接口,以便用户实现指纹的删除。

三、海凌科指纹模块编程代码的应用领域海凌科指纹模块编程代码广泛应用于以下几个领域:1.消费电子:如手机、平板电脑等设备,可以实现指纹解锁、支付等功能。

2.安防门禁:通过指纹识别技术,可以实现对特定区域的安全控制。

3.办公场所:例如考勤系统,可以通过指纹识别来记录员工上下班时间。

4.智能家居:如智能门锁等设备,可以实现通过指纹识别来控制家庭设备。

四、海凌科指纹模块编程代码的发展前景随着科技的不断发展,生物识别技术越来越受到重视。

作为其中的一种,指纹识别技术具有便捷、安全等特点,有着广阔的发展前景。

DediProg 1.0 专用编程器指南说明书

DediProg 1.0 专用编程器指南说明书

Table of ContentsI.Introduction (3)II.Conditions and Limitations (3)III.How to start (3)mand List (4)V.Revision History (6)Important notice:This document is provided as a guideline and must not be disclosed without consent of DediProg. However, no responsibility is assumed for errors that might appear.DediProg reserves the right to make any changes to the product and/or the specification at any time without notice. No part of this document may be copied or reproduced in any form or by any means without prior written consent of DediProg.--device arg (Work with all Basic Switches)- 1: Activate only the programmer connected to USB1- n: Activate only the programmer connected to USBnNote: If '--device' is not used, the command will be executed on allconnected programmer.--fix-device arg Fix programmer serial number with programmer sequence.- Instructions must be enclosed in double quotation marks("")Example:dwcmd --fix-device "1 SPU000001"--list-device-id arg - 0 : List all programmers’ ID from USB1 to USBn (Default)Note: The sequence is assigned by OS during USB plug-in.- 1: Prompt the device ID of programmer connected to USB1.- n: Prompt the device ID of programmer connected to USBn. Miscellaneous options:-t [ --timeout ] arg (=600) Timeout value in seconds-i [ --silent ] Suppress the display of real-time timer counting- Used when integrating with 3rd-party tools(e.g. IDE)--log arg Write operation result into a file(Default is located underC:\DediLog\dwcmd-xxxxx.log)Example:dwcmd --usb-prj d:\test.dprj --log d:\result.txtNote:Windows Command Line does not support ProgMaster series.Usage Examples:1. dwcmd -d file.dprj -rDownload project file to StarProg and run it.2. dwcmd -rRun project from the StarProg embedded SD card.3. dwcmd --usb-prj file.dprjExecute project file via USB.4. dwcmd --usb-prj file.dprj --device 1Execute Programmer 1 project file.5. dwcmd -d file.dprj --device 1Download project file to programmer 16. dwcmd -r --device 1Execute project file7. dwcmd -d file.dprj -r --device 2Download project file to StarProg and run the project file on programmer 2.8. dwcmd -d file.dprj -r --log d:\result.txtDownload project file to StarProg and save the operation result to d:\result.txt.V.Revision HistoryDate Version Changes05/11/2016 1.0 Initial releaseDediProg Technology Co., Ltd- Taiwan Headquarter TEL: 886-2-2790-7932FAX: 886-2-2790-79164F., No.7, Ln. 143, Xinming Rd., Neihu Dist., Taipei City 114, Taiwan- Shanghai Office TEL: 86-21-5160-0157 FAX: 86-21-6126-3530Room 503, Block E, No.1618, Yishan Road, Shanghai, ChinaTechnical Support:support@Sales Support:sales@Information furnished is believed to be accurate and reliable. However, DediProg assumes no responsibility for the consequences of use of such information or for any infringement of patents or other rights of third parties which may result from its use. Specifications mentioned in this publication are subject to change without notice.This publication supersedes and replaces all information previously supplied.All rights reservedPrinted in Taiwan.。

ZKFinger10.0版本说明

ZKFinger10.0版本说明

特别提示尊敬的客户,您好:首先感谢您选择本公司的产品!本产品内嵌中控科技最新推出的 ZKFinger 10.0 版高速算法,同时保留旧版算法。

您可以方便的通过菜单的 系统设置选项进行选择。

中控科技一直专著于指纹识别算法的研究和产业化推广,已将指纹识别 系统应用到各种行业中。

随着指纹识别系统越来越广泛的应用,市场对指纹 识别算法的精确性,适用性和运算速度等多方面提出更高的要求。

为满足这 些需求,我们从低质量指纹图像的增强、指纹的特征提取、指纹图像的分类 与检索及压缩技术、指纹图像匹配算法等多方面进行优化,推出ZKFinger10.0 版高速算法。

该算法在大规模的数据库上进行了严格的测试, 误识率(False Accept Rate, FAR)、拒识率(False Reject Rate, FRR)、 拒登率(Error Registration Rate, ERR)等性能都大大提高,对过干、太 湿、伤疤、脱皮等低质量的指纹图像处理效果明显增强,算法比对速度提升 了 10 倍以上。

该算法的指纹模板也同步进行了优化存储,与以前算法版本 的指纹模板不兼容。

您选择 ZKFinger 10.0 版高速算法后,必须重新登记用 户指纹模板,并使用随机附带的最新版考勤软件进行用户数据的上传下载等 工作。

本公司提醒您,在不同的环境、不同的需求下选择合适的算法,正确选 择算法会大大提高产品的使用效果。

若使用过程中出现问题请通过电话或者 MSN 寻找我们的技术帮助。

对于操作不当而造成的损失及其他问题等我公司 不承担任何直接或间接责任。

ZKFinger10.0 使用说明下面介绍 ZKFinger10.0 算法的使用指南、新旧版算法的区别及常见问 题解答。

一、使用指南:1、选择指纹算法。

在设备上按【菜单】键,进入【系统设置】-〉【系 统参数】-〉【算法版本】,选择使用 ZKFinger10.0或 ZKFinger9.0 算法。

基于指纹IC卡门禁系统的实现

基于指纹IC卡门禁系统的实现

基于指纹IC卡门禁系统的实现作者:彭佩来源:《电脑知识与技术》2013年第09期摘要:该文以VB为编程语言和ACCESS数据库平台,解决传统C/S模式下单纯利用指纹验证时,数据库中一对多查询的低效率验证身份的问题,同时解决了单纯利用IC卡的身份验证不可靠的问题。

关键词:指纹;门禁系统;IC卡;身份识别中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)09-2169-03指纹IC卡系统是利用指纹的唯一性和不可替代性来保证使用人身份的正确性,以IC卡的数据储存和加密功能作为使用人与使用单位的信息连接桥梁,实现使用人身份的验证。

通过指纹IC卡设备实现指纹的采集、验证和读写IC卡的功能,根据结果发送信号至单片机控制电插锁,达到门禁自动化目的。

1 数据库实现1.1数据库建立使用Microsoft Access创建数据库,首先是用户数据表,包括用户编号(UserID),姓名(Name),性别(Sex),备注(fpc),指纹特征(Purv),有效期(vValid)等字段。

其次是日志表(log),包括日志流水ID(recordID),用户编号(UserID),进入时间(userData),是否通行(result)等字段。

最后是用户表的UserID和日志表的userID对应。

1.2数据库函数创建1)创建Public Function exesql(ByVal sql As String) As ADODB.Recordset函数2)利用ADODB建立数据连接3)打开数据库4)数据库的读写操作:可直接调用exesql(ByVal sql As String)函数进行操作。

2 指纹数据采集实现指纹的采集主要依靠URU4000指纹采集仪进行,URU4000可以通过BiokeySDK控件进行操作。

2.1指纹仪初始化连接使用BiokeySD的InitEngine()方法可以初始化指纹仪,此函数支持同个终端下多个指纹仪同时使用,初始化时必须指定指纹仪的编号进行连接,如: ZKFPEng X1. SensorIndex=0,即可对编号为0的指纹仪进行连接,通过ZKFPEngX1.InitEngine的返回值能判断指纹仪是否连接成功,其中返回0为成功,1为指纹识别驱动加载失败,2为没有连接指纹仪,3为指定的SensorIndex对应的指纹仪不存在。

中控指纹仪开发文档整理版(ZKFinger SDK 5.0)

属性
Active EngineValid EnrollIndex EnrollCount FPEngineVersion ImageHeight ImageWidth IsRegister RegTplFileName VerTplFileName SensorCount SensorIndex SensorSN Templa源自eLen数据类型 访问类型
Boolean Boolean Integer Integer string Integer Integer Boolean string string Integer Integer string Integer R R R R/W R R R R RW R/W R R/W R R R/W R/W R R
OneToOneThreshold Integer Threshold LastQuality LowestQuality Integer Integer Integer
说明
当前SensorIndex 设定的指纹采集器是否准备就绪。 指纹识别系统是否正常工作。调用过函数initEngine 后会返回有效结果 登记指纹时取样的序号,即表示当前手指登记已经取到的有效次数。 登记指纹时取样的次数,取值范围为1、3、4 次。 指纹识别系统算法引擎版本号,默认为ZKFinger9.0 算法引擎,其值为“9”,若使用10.0 算法引擎,则在调用其他函数 之前首先将该属性设置为“10”,然后调用InitEngine、CreateFPDBCache 等函数。 指纹图像的高度 指纹图像的宽度 是否正登记指纹 设置当事件OnEnrollToFile 发生时,保存指纹登记模版的文件名称。 设置当事件OnCaptureToFile 发生时,保存指纹验证模版的文件名称 当前连接到计算记得指纹采集器的个数,当EngineValid 无效时,返回0 连接多个指纹采集器时,选择指纹头的序号,从0 开始;小于零时指纹采集器不工作。 指纹采集器的硬件序列号 指纹登记模版的最大字节长度。注意:ZKFinger 9.0 引擎模板最大长度为1152 字节,ZKFinger 10.0 算法引擎为3072; 设定ZKFinger 低速指纹1:1 比对的识别阀值分数(1-100),默认为10,值越大,误判率越低同时拒绝率变大 设定指纹识别系统比对识别阀值分数(1-100),默认为10,值越大,误判率越低同时拒绝率变大 最新一次指纹的质量,在事件OnFeatureInfo 可以获取。当LastQuality小于LowestQuality 时,指纹质量不合格 设置允许最低指纹质量,默认值为60,当LastQuality 小于LowestQuality时,指纹质量不合格。

海凌科指纹模块编程代码

海凌科指纹模块编程代码【最新版】目录1.海凌科指纹模块编程代码概述2.海凌科指纹模块编程代码结构3.海凌科指纹模块编程代码实现功能4.海凌科指纹模块编程代码应用场景5.海凌科指纹模块编程代码的优点与不足正文一、海凌科指纹模块编程代码概述海凌科指纹模块编程代码是一种基于海凌科指纹识别技术的编程代码,可用于开发各种指纹识别应用,如门禁系统、手机解锁、金融支付等。

通过使用海凌科指纹模块编程代码,开发者可以实现指纹识别功能,为用户带来便捷、安全的体验。

二、海凌科指纹模块编程代码结构海凌科指纹模块编程代码主要包括以下几个部分:1.指纹识别模块:负责读取指纹信息,并将其转换为可识别的数字信号。

2.数据处理模块:负责对指纹信号进行处理,提取特征点,并将其与已存储的指纹特征进行对比。

3.通信接口模块:负责与外部设备进行通信,如与主控制器进行数据交互。

4.密码验证模块:在指纹识别失败时,提供备用的密码验证功能。

三、海凌科指纹模块编程代码实现功能海凌科指纹模块编程代码可实现以下功能:1.指纹识别:通过指纹识别模块读取用户指纹,并将其转换为数字信号,用于后续处理。

2.指纹匹配:数据处理模块负责对指纹信号进行处理,提取特征点,并将其与已存储的指纹特征进行对比,以判断用户身份。

3.通信交互:通过通信接口模块与外部设备进行数据交互,如与主控制器进行数据传输。

4.密码验证:在指纹识别失败时,可通过密码验证模块提供备用的身份验证功能。

四、海凌科指纹模块编程代码应用场景海凌科指纹模块编程代码可应用于以下场景:1.门禁系统:通过指纹识别技术,实现对建筑物或房间的出入管理。

2.手机解锁:将指纹识别功能集成到手机中,实现快速、安全的手机解锁。

3.金融支付:通过指纹识别技术,实现对金融账户的便捷、安全管理。

五、海凌科指纹模块编程代码的优点与不足优点:1.安全性高:指纹识别技术具有较高的识别准确率,可有效防止伪造和冒用。

2.便捷性强:用户无需携带钥匙、卡片等物品,只需通过指纹即可实现身份验证。

海康威视dvr基于delphi下应用的例子

海康威视dvr基于delphi下应用的例子【篇一:海康威视dvr基于delphi下应用的例子】文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):delphi\include\hcnetsdk.pas......\playback\clientdemo.dcu......\........\clientdemo.ddp......\........\clientdemo.dfm......\........\clientdemo.pas......\........\clientdemo2.cfg......\........\clientdemo2.dof......\........\clientdemo2.dpr......\........\clientdemo2.dproj......\........\clientdemo2.dproj.2007......\........\clientdemo2.dproj.local......\........\clientdemo2.exe......\........\clientdemo2.identcache......\........\clientdemo2.res......\........\hcnetsdk.dcu......\........\hcnetsdk.pas......\........\hcnetsdk.pas.bak......\........\plaympeg4.dcu......\........\plaympeg4.pas......\.review\clientdemo.dcu......\.......\clientdemo.ddp......\.......\clientdemo.dfm......\.......\clientdemo.pas......\.......\clientdemo2.cfg......\.......\clientdemo2.dof......\.......\clientdemo2.dpr......\.......\clientdemo2.dproj......\.......\clientdemo2.dproj.2007......\.......\clientdemo2.dproj.local......\.......\clientdemo2.exe......\.......\clientdemo2.identcache......\.......\clientdemo2.res......\.......\hcnetsdk.dcu......\.......\hcnetsdk.pas......\.......\hcnetsdk.pas.bak......\.......\plaympeg4.pas......\include......\lib......\playback......\previewdelphi【篇二:海康威视dvr基于delphi下应用的例子】文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):hcdemo\dssdk.dll......\hcdemo.cfg......\hcdemo.dof......\hcdemo.dpr......\hcdemo.exe......\hcdemo.res......\hcdemo.~dpr......\hcnetsdk.dll......\hikvisionsdk.dcu......\hikvisionsdk.pas......\hikvisionsdk.~pas......\playm4.dll...... mman32.dll...... mplay.dll......\unit1.dcu......\unit1.ddp......\unit1.dfm......\unit1.pas......\unit1.~ddp......\unit1.~dfm......\unit1.~pas......\unitplayback.dcu......\unitplayback.ddp......\unitplayback.dfm......\unitplayback.pas......\unitplayback.~ddp......\unitplayback.~dfm......\unitplayback.~pashcdemo2015-05-04 标签:。

hudi源码编译

hudi源码编译
编译Hudi源码是一个相对复杂的过程,需要一些基本的编程和系统知识。

下面是编译Hudi源码的一般步骤:
1. 首先,在你的开发环境中安装Java开发工具包 (JDK)。

确保你安装了正确的版本(例如,Java 8或Java 11),并且配置了JAVA_HOME环境变量。

2. 下载Hudi源码。

你可以从Hudi的官方GitHub仓库中获取源码。

请注意,GitHub仓库可能会根据发布的版本而有所不同。

选择相应的分支或标记下载源码。

3. 安装Maven。

Maven是一个用于构建Java项目的强大工具。

确保你安装了最新版本的Maven,并配置了MAVEN_HOME环境变量。

4. 进入Hudi源码的根目录,并使用终端或命令行窗口运行以下命令:
```shell
mvn clean install -DskipTests
```
这个命令会清理和构建整个项目,并跳过运行单元测试。

这个过程可能需要一些时间,因为它会下载所有必需的依赖项。

5. 如果编译成功,你将在输出的目录(通常是`/target`)中找到已编译的Hudi JAR文件。

这个JAR文件可以用于构建Hudi应用程序或在其他项目中使用Hudi。

请注意,编译Hudi源码需要一些系统和网络资源,并且可能因你的环境和网络状况而有所不同。

如果在编译过程中遇到问题,你可以查阅Hudi的官方文档或在开发社区寻求帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

demo:unit comsdktest;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, zkemkeeper_TLB, Menus, Buttons, Grids,ValEdit, ExtCtrls;typeTForm1 = class(TForm)CZKEM1: TCZKEM;Label1: TLabel;btnConnect: TButton;Memo1: TMemo;SaveDialog1: TSaveDialog;gbOP: TGroupBox;btnSetTime: TButton;vleDevInfo: TValueListEditor;btnLoadDevInfo: TBitBtn;btnSaveDevInfo: TBitBtn;Button3: TButton;GroupBox1: TGroupBox;btnClearData: TButton;Button5: TButton;Button6: TButton;btnBackupUser: TButton;btnRestore: TButton;Button9: TButton;OpenDialog1: TOpenDialog;btnDeleteUser: TButton;btnSetName: TButton;Button10: TButton;btnAutoTest: TButton;edtNetAddress: TLabeledEdit;edtNetPort: TLabeledEdit;edtBaudRate: TEdit;sbtnRS232: TSpeedButton;sbtnTCPIP: TSpeedButton;Label5: TLabel;btnACUnlock: TButton;edtPassword: TEdit;Label2: TLabel;chkEnabled: TCheckBox;Button7: TButton;Button8: TButton;Button12: TButton;Button11: TButton;Button14: TButton;Button13: TButton;Button15: TButton;Button16: TButton;Button17: TButton;Button18: TButton;Button19: TButton;Button20: TButton;btnSMS: TButton;Button1: TButton;SaveDialog2: TSaveDialog;OpenDialog2: TOpenDialog;Button2: TButton;procedure FormCreate(Sender: TObject);procedure btnConnectClick(Sender: TObject);procedure btnLoadDevInfoClick(Sender: TObject);procedure btnSaveDevInfoClick(Sender: TObject);procedure btnSetTimeClick(Sender: TObject);procedure btnClearDataClick(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure btnBackupUserClick(Sender: TObject);procedure btnRestoreClick(Sender: TObject);procedure vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: String);procedure btnSetNameClick(Sender: TObject);procedure btnDeleteUserClick(Sender: TObject);procedure btnAutoTestClick(Sender: TObject);procedure sbtnRS232Click(Sender: TObject);procedure sbtnTCPIPClick(Sender: TObject);procedure btnACUnlockClick(Sender: TObject);procedure chkEnabledClick(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure btnSMSClick(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button12Click(Sender: TObject);procedure Button11Click(Sender: TObject);procedure Button14Click(Sender: TObject);procedure Button13Click(Sender: TObject);procedure Button15Click(Sender: TObject);procedure Button16Click(Sender: TObject);procedure Button17Click(Sender: TObject);procedure Button18Click(Sender: TObject);procedure CZKEM1FingerFeature(ASender: TObject; Score: Integer); procedure CZKEM1Verify(ASender: TObject; UserID: Integer);procedure Button19Click(Sender: TObject);procedure Button20Click(Sender: TObject);procedure Button2Click(Sender: TObject);//procedure GroupBox1Click(Sender: TObject);private{ Private declarations }DevID: integer;Commport: integer;Modified: string;AppPath:string;procedure AddInfo(const s: string);procedure ReadDeviceStatus;procedure BackupUser(const fn: string);procedure RestoreUser(const fn: string);function SaveGLogs(const fn: string): integer;function BTimeEncode(MinuteSecond: integer): string;function BTimeDecode(const TimeStr: string): integer;function BNetSpeedEncode(speed: integer): string;function BNetSpeedDecode(const speed: string): integer;public{ Public declarations }end;varForm1: TForm1;function decodedata(const s: string): string;function encodedata(const BinData; size: integer): string;function LoadFile(const fn: string): string;procedure SaveFileData(const fn: string; const Data; size: integer); procedure SaveFile(const fn: string; Data: string);implementationuses inifiles, uUser;{$R *.dfm}HexOfNum: array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');StatusNames: array[1..12] of string=('Tatal administrator','Tatal users','Tatal FP','Tatal Password','Tatal manage record','Tatal In and out record','Nominal FP number','Nominal user number','Nominal In and out record number','Remain FP number','Remain user number','Remain In and out record number');Languages: array[0..2] of string=('English','Simplified Chinese','Traditional Chinese');BaudRates: array[0..6] of string=('1200 bps','2400 bps','4800 bps','9600 bps','19200 bps','38400 bps','115200 bps');CRCs: array[0..2] of string=('Nothing','Even','Odd');StopBits: array[0..1] of string=('One','Two');DateSps: array[0..1] of string=('"/"','"-"');MSpeeds: array[0..2] of string=('Low speed','High speed','Auto');OnOffs: array[0..1] of string=('Off',YesNos: array[0..1] of string=('No','Yes');DateFormats: array[0..9] of string=('YY-MM-DD','YY/MM/DD','YY.MM.DD','MM-DD-YY','MM/DD/YY','MM.DD.YY','DD-MM-YY','DD/MM/YY','DD.MM.YY','YYYYMMDD');NetSpeeds: array[0..4] of string=('10M_H','100M_H','10M_F','100M_F','AUTO');NetSpeedValues: array[0..4] of integer=(0,1,4,5,8);procedure TForm1.FormCreate(Sender: TObject);vars: widestring;i,j: integer;beginAppPath:= ExtractFilePath(application.exename);CZKEM1.GetSDKVersion(s);label1.Caption := s;vleDevInfo.ItemProps[2].EditStyle := esPickList;for i:=0 to length(Languages)-1 dovleDevInfo.ItemProps[2].PickList.Add(Languages[i]);vleDevInfo.ItemProps[8].EditStyle := esPickList;for i:=0 to length(BaudRates)-1 dovleDevInfo.ItemProps[8].PickList.Add(BaudRates[i]);vleDevInfo.ItemProps[9].EditStyle := esPickList;for i:=0 to length(CRCs)-1 dovleDevInfo.ItemProps[9].PickList.Add(CRCs[i]);vleDevInfo.ItemProps[10].EditStyle := esPickList;for i:=0 to length(StopBits)-1 dovleDevInfo.ItemProps[10].PickList.Add(StopBits[i]);vleDevInfo.ItemProps[11].EditStyle := esPickList;for i:=0 to length(DateSps)-1 dovleDevInfo.ItemProps[11].PickList.Add(DateSps[i]); for j := 12 to 15 dovleDevInfo.ItemProps[j].EditStyle := esPickList;for i:=0 to length(OnOffs)-1 dovleDevInfo.ItemProps[j].PickList.Add(OnOffs[i]); end;vleDevInfo.ItemProps[16].EditStyle := esPickList;for i:=0 to length(MSpeeds)-1 dovleDevInfo.ItemProps[16].PickList.Add(MSpeeds[i]); end;function LoadFile(const fn: string): string;varf: tmemorystream;beginresult := '';f := tmemorystream.Create;tryf.LoadFromFile(fn);f.Position := 0;if f.Size>0 thenbeginsetlength(result, f.size);f.Read(result[1], length(result));end;finallyf.Free;end;end;procedure SaveFile(const fn: string; Data: string);varf: tmemorystream;beginf := tmemorystream.Create;tryif length(data)>0 thenf.Write(Data[1], length(data));f.Position := 0;f.SaveToFile(fn);finallyf.Free;end;end;procedure SaveFileData(const fn: string; const Data; size: integer);varf: tmemorystream;beginf := tmemorystream.Create;tryif size>0 thenf.Write(Data, size);f.Position := 0;f.SaveToFile(fn);finallyf.Free;end;end;procedure TForm1.btnConnectClick(Sender: TObject);varErrorCode: integer;c: boolean;beginif btnConnect.Tag = 1 thenbeginCZKEM1.RefreshData(DevId);CZKEM1.EnableDevice(DevId, TRUE);CZKEM1.Disconnect;btnConnect.Tag := 0;btnConnect.Caption := 'Connect';endelsebegindevid:=strtoint(edtNetPort.Text);if edtPassword.Text>'' thenCZKEM1.SetCommPassword(strtoint(edtPassword.Text));if pos('COM', uppercase(edtNetAddress.text))=1 thenbegincommport:=ord(edtNetAddress.text[4])-ord('0');mPort := commport;c:=CZKEM1.Connect_Com( commport, DevID, strtoint(edtBaudRate.text)); endelsebeginc:=CZKEM1.Connect_net(edtNetAddress.text, Devid);Devid:=1;end;if c thenbeginAddInfo('Device Connected.');ReadDeviceStatus;btnConnect.Tag := 1;btnConnect.Caption := 'Disconnect';endelsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! ConnectDevice ErrorNo.=%d',[ErrorCode]));end;AddInfo(' ');end;end;procedure TForm1.AddInfo(const s: string);beginmemo1.Lines.Add(s);memo1.Refresh;end;procedure TForm1.btnLoadDevInfoClick(Sender: TObject);varErrorCode, Value, i: integer;beginfor i:=1 to vleDevInfo.RowCount-1 doif CZKEM1.GetDeviceInfo(devid, i, value) thenbeginif i=29 thenbeginvleDevInfo.Strings.ValueFromIndex[i-1]:=BNetSpeedEncode(Value);endelse if vleDevInfo.ItemProps[i-1].HasPickList thenbeginif (value>=0) and (value<vleDevInfo.ItemProps[i-1].PickList.Count) thenvleDevInfo.Strings.ValueFromIndex[i-1]:=vleDevInfo.ItemProps[i-1].PickList[value] elsevleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);endelse if (i>=19) and (i<=22) thenvleDevInfo.Strings.ValueFromIndex[i-1]:=BTimeEncode(Value)elsevleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);endelsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));end;Modified:=stringofchar(#0,100);{Modified:=stringofchar(#0,100);for i:=1 to 17 doif CZKEM1.GetDeviceInfo(devid, i, value) thenbeginif vleDevInfo.ItemProps[i-1].HasPickList thenbeginif (value>=0) and (value<vleDevInfo.ItemProps[i-1].PickList.Count) thenvleDevInfo.Strings.ValueFromIndex[i-1]:=vleDevInfo.ItemProps[i-1].PickList[value] elsevleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);endelsevleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);endelsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));end;}end;procedure TForm1.btnSaveDevInfoClick(Sender: TObject);varErrorCode, Value, i: integer;beginfor i:=1 to vleDevInfo.RowCount-1 doif Modified[i]='1' thenbeginif i=29 thenbeginValue := BNetSpeedDecode(vleDevInfo.Strings.ValueFromIndex[i-1]);endelse if vleDevInfo.ItemProps[i-1].HasPickList thenbeginfor value:=0 to vleDevInfo.ItemProps[i-1].PickList.Count-1 doif vleDevInfo.ItemProps[i-1].PickList[value]=vleDevInfo.Strings.ValueFromIndex[i-1] then break;if value>=vleDevInfo.ItemProps[i-1].PickList.Count thenvalue:=0;endelse if (i>=19) and (i<=22) thenValue := BTimeDecode(vleDevInfo.Strings.ValueFromIndex[i-1])elsevalue:=strtoint(vleDevInfo.Strings.ValueFromIndex[i-1]);if not CZKEM1.SetDeviceInfo(devid, i, value) thenbeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! SetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));exit;endelseModified[i]:=#0;if i=2 thenbeginedtNetAddress.Text := vleDevInfo.Strings.ValueFromIndex[i-1];DevId:=value;end;end;AddInfo('SetDeviceInfo OK');end;procedure TForm1.btnSetTimeClick(Sender: TObject);varErrorCode,dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: integer;beginif CZKEM1.SetDeviceTime(devid) thenbeginAddInfo('SetDeviceTime OK.');if CZKEM1.GetDeviceTime(devid, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond) thenAddInfo(Format('DeviceTime=%d-%d-%d %d:%d:%d',[dwYear, dwMonth, dwDay, dwHo ur, dwMinute, dwSecond]))elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetDeviceTime ErrorNo.=%d',[ErrorCode]));end;endelsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! SetDeviceTime ErrorNo.=%d',[ErrorCode]));end;end;procedure TForm1.btnClearDataClick(Sender: TObject);beginCZKEM1.ClearKeeperData(devid);end;procedure TForm1.Button5Click(Sender: TObject);beginCZKEM1.ClearGLog(devid);end;procedure TForm1.Button6Click(Sender: TObject);beginCZKEM1.ClearAdministrators(DevId);end;procedure TForm1.Button9Click(Sender: TObject);vardwTMachine, dwEnrollNumber,dwEMachineNumber,dwVerifyMode: Integer;dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute: Integer;s: string;f: tfilestream;beginif SaveDialog1.Execute thenbeginf:=tfilestream.Create(SaveDialog1.FileName, fmOpenWrite or fmCreate);tryif CZKEM1.ReadGeneralLogData(DevId) thenwhile CZKEM1.GetGeneralLogData(DevId,dwTMachine, dwEnrollNumber,dwEMachineNumb er,dwVerifyMode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute) dobegins:=format('%5d %d %d %4d-%2d-%2d %2d:%2d'#13#10, [dwEnrollNumber,dwVerify Mode,dwInOutMode,dwYear,dwMonth,dwDay,dwHour,dwMinute]);f.Write(s[1],length(s));end;finallyf.Free;end;end;end;function NumOfHex(c: Char): integer;beginresult := 0;if c>='a' then result := ord(c)-ord('a')+10else if c>='A' then result := ord(c)-ord('A')+10else if c>='0' then result := ord(c)-ord('0');if result>16 thenraise exception.Create('Error of Integer: '+c);end;typeTByteArray=array[0..0] of byte;PByteArray=^TByteArray;function encodedata(const BinData; size: integer): string; vari: integer;da: pbytearray;beginsetlength(result, size*2);da:=@BinData;for i:= 0 to size-1 dobeginresult[i*2+1]:=HexOfNum[da[i] div 16];result[i*2+2]:=HexOfNum[da[i] mod 16];end;end;function decodedata(const s: string): string;vari: integer;da: pbytearray;beginsetlength(result, length(s) div 2);for i:= 1 to length(result) dobeginresult[i]:=char(NumOfHex(s[i*2-1])*16+NumOfHex(s[i*2]));end;end;procedure TForm1.Button3Click(Sender: TObject);beginCZKEM1.PowerOffDevice(DevID);end;procedure TForm1.BackupUser(const fn: string);varf: tinifile;dwEnrollNumber,dwBackupNumber,Password,dwMachinePrivilege,i,c,Len: integer;EnrollData: array[0..2047] of byte;s: string;Enable: WordBool;UName, UPwd: widestring;beginDeleteFile(fn);f := tinifile.Create(fn);tryif CZKEM1.ReadAllUserID(DevID) thenbeginc:=0;while CZKEM1.GetAllUserInfo(DevID, dwEnrollNumber, UName, UPwd,dwMachinePrivilege, Enable) dobegins:=format('Users_%d',[dwEnrollNumber]);f.WriteInteger(s,'Privilege',dwMachinePrivilege);f.WriteBool(s,'Enabled', Enable);f.WriteString(s, 'Name', UName);f.WriteString(s, 'Password', UPwd);//Try get every fingerprint templatefor i:=0 to 9 dobeginzeromemory(@EnrollData[0], 2048);Len:=2048;if CZKEM1.GetUserTmp(DevId, dwEnrollNumber, i, EnrollData[0], Len) then f.WriteString(s, 'FPT_'+inttostr(i), encodedata(EnrollData[0], Len));end;inc(c);end;end;finallyf.Free;end;end;procedure TForm1.ReadDeviceStatus;vars: widestring;ErrorCode, Value, i,dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond: integer;beginif CZKEM1.GetFirmwareVersion(devid, s) thenAddInfo('Firmware Version: '+s)elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetFirmwareVersion ErrorNo.=%d',[ErrorCode]));end;if CZKEM1.GetSerialNumber(devid, s) thenAddInfo('Serial Number: '+s)elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetSerialNumber ErrorNo.=%d',[ErrorCode]));end;if CZKEM1.GetProductCode(devid, s) thenAddInfo('ProductCode: '+s)elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetProductCode ErrorNo.=%d',[ErrorCode]));end;if CZKEM1.GetDeviceTime(devid, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond) thenAddInfo(Format('DeviceTime=%d-%d-%d %d:%d:%d',[dwYear, dwMonth, dwDay, dwHou r, dwMinute, dwSecond]))elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetDeviceTime ErrorNo.=%d',[ErrorCode]));end;for i:=1 to length(StatusNames) doif CZKEM1.GetDeviceStatus(devid, i, value) thenAddInfo(format('%s: %d', [StatusNames[i],value]))elsebeginCZKEM1.GetLastError(ErrorCode);AddInfo(format('! GetDeviceStatus(%d) ErrorNo.=%d',[i, ErrorCode]));end;end;procedure TForm1.RestoreUser(const fn: string);varf: tinifile;eno,i: integer;dwEnrollNumber,dwBackupNumber,Password,dwMachinePrivilege, dwEnable, c: integer;fpt, s, UName, UPwd: string;Sections: Tstrings;beginf:=tinifile.Create(fn);trySections := tstringlist.Create;tryf.ReadSections(Sections);for i:=1 to 65534 dobegins:=format('Users_%d',[i]);if Sections.IndexOf(s)>=0 thenbeginApplication.ProcessMessages;dwMachinePrivilege := f.ReadInteger(s, 'Privilege', 0);dwEnable := f.ReadInteger(s, 'Enabled', 1);UPwd := f.ReadString(s, 'Password', '');if UPwd='-1' thenUPwd:='';UName := f.ReadString(s, 'Name','');CZKEM1.SetUserInfo(DevId, i, UName, UPwd, dwMachinePrivilege, dwEnable<>0); for dwBackupNumber:=0 to 9 dobeginfpt:=f.ReadString(s, 'FPT_'+inttostr(dwBackupNumber), '');if fpt>'' thenbeginfpt:=decodedata(fpt);if CZKEM1.SetUserTmp(DevId, i, dwBackupNumber, pbyte(@fpt[1])^) thenAddInfo(format('SetEnrollData OK: User=%d,FP=%d', [i,dwBackupNumber])) elsebeginCZKEM1.GetLastError(eno);AddInfo(format('SetEnrollData Fail: User=%d,FP=%d, Error=%d', [i,dwBackupN umber,eno]));end;end;end;end;end;finallysections.Free;end;finallyf.free;end;end;procedure TForm1.vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer;const KeyName, KeyValue: String);beginModified[ARow] := '1';end;procedure TForm1.btnSetNameClick(Sender: TObject);beginShowUserForm(CZKEM1, DevID);end;procedure TForm1.btnDeleteUserClick(Sender: TObject);beginCZKEM1.DeleteEnrollData(DevId, 69, DevId, 0);CZKEM1.DeleteEnrollData(DevId, 69, DevId, 1);end;varTesting: Boolean=false;procedure TForm1.btnAutoTestClick(Sender: TObject);vari: integer;Testing:=not Testing;if Testing thenbtnAutoTest.Caption := 'End Test'elsebtnAutoTest.Caption := 'Start Test';i:=0;while Testing dobeginAddInfo(Format('-----------Testing %d--------',[i]));inc(i);btnConnect.Click;if btnConnect.Tag=0 thenbeginTesting:=not Testing;if Testing thenbtnAutoTest.Caption := 'End Test'elsebtnAutoTest.Caption := 'Start Test';break;end;// sleep(1000);Addinfo('Clear Data...');btnClearData.Click;if FileExists(OpenDialog1.FileName) thenRestoreUser(OpenDialog1.FileName);Application.ProcessMessages;Addinfo('Delete User 69...');btnDeleteUser.Click;Sleep(2000);ReadDeviceStatus;Application.ProcessMessages;if FileExists(OpenDialog1.FileName) thenRestoreUser(OpenDialog1.FileName);ReadDeviceStatus;Addinfo('Clear Data...');btnClearData.Click;Addinfo('Disconnect...');btnConnect.Click;Application.ProcessMessages;end;end;procedure TForm1.btnBackupUserClick(Sender: TObject);if savedialog1.Execute thenBackupUser(savedialog1.FileName);end;procedure TForm1.btnRestoreClick(Sender: TObject);beginif OpenDialog1.Execute thenRestoreUser(OpenDialog1.FileName);end;procedure TForm1.sbtnRS232Click(Sender: TObject);beginedtnetAddress.EditLabel.Caption := 'Com Port:';edtNetPort.EditLabel.Caption := 'Device ID:';edtnetAddress.Text := 'COM1';edtNetPort.Text := '1';end;procedure TForm1.sbtnTCPIPClick(Sender: TObject);beginedtnetAddress.EditLabel.Caption := 'IP Address:';edtNetPort.EditLabel.Caption := 'Port Number:';edtnetAddress.Text := '192.168.1.201';edtNetPort.Text := '$1112';end;procedure TForm1.btnACUnlockClick(Sender: TObject);beginCZKem1.ACUnlock(DevId,200)end;procedure TForm1.chkEnabledClick(Sender: TObject);beginCZKEM1.EnableDevice(DevID, chkEnabled.Checked);end;constTEMP1='A1CA268296295AA10B50AA604009469950016A41194E3C514A3754D318D6B94D40 19DDBE7A' +'0312DCC078000EE52277F10735AF7A780D44A24FA30B4FB92BB80A819468610C221250 401A' +'071C7A93092B8A6C400E18147DF109249C53B81740A747F30CC8945FBC12258D42540F DFA4' +'39FC10B9867CD20714993DB409C71C26330B453341BC10778873F40788B461B410C6BF 4FA3' +'09E9B418382C9B266B930740BD5D78136AA73F323DC1283D405FB52D12220739A5873 80A31' +'AB2ED116263F293C0B7A46140614C334EA0F10117E4C56A5A8BACEFFFBEC12C0434C5 5A299' +'AACE6E76A2FCECA846A2FF99995D656F7707A1DFC9184BA2AE799958616D010A12A1E A994B' +'A19E6881545C6C0313A1FBA81F48A3BB7688BF5D1521248343A3CC8667AC49392FA177 6728' +'42A7BC8467BB5215656742A79C6558CC7535556641A28A5646404BA3842663663FA279 6521' +'3A51A3734545363DA16A312418086E57A2433343383E3A38231A120C026F5CA2345441 3D39' +'3314A227543061A244655246382104A2BA652164A2586454517E2A05A498656448A261 5F57' +'54C207A4565A978AA2704B43C476A29AA8BD0FE0317773';TEMP2='ocoqgo5BMsMGAcUxvArqwlMxCOlEWfwM6qEuYQs4OTSAEHuUQ4EZOKhGQAyTETu TDUYqLABqNQM9wxNhDxUABMcRS/FQJChldAyKtSsjEQIjQ/gOnyYoIRhOKj7AEpQRSJNlMokb'+ 'AAVSrlTxDYAfNwAJLxErMwxKmQ88BcUbINQLSZMVfAZPk1zSBZoiafQMmK9tMwV+C2l8B JmEUzQOhjdctAl4sRdjC9I7SzgIdQt0swomn3Z4B5undLIQijUaQA/gFH9iA521brgI'+'dwhXkROGwmF8Cu4pVEQSX4BKCxARfk5Woau7aXQHFKH8qSPAR6L+qrpkcQYWof2agU eiz6mJXGkFGCGhuZgmR6LOiIdUXQscofyYgUqjq4ZmkiWiTKl5KEqjuWRWUS2hKZiCSqap'+'YkYyE3h5gUmnqlMzMiRniXhLoZpSPjWkAVVXiHdNoapjPi0hozd1d3YRTqG8eEkapEaGVnh 4S6Hvnm4HpOeGZniJRU5cYGdzA6PIhneHgT9LYmhudqLahmWCd3d+Q2qmzMyXV2eY'+'lMJzpaqmh3d6hl/DA6Rmd4iXmGPAxAWiVIiageD/';procedure TForm1.Button1Click(Sender: TObject);vari: integer;begini:= CZKEM1.GetFPTempLengthStr(TEMP2);Memo1.lines.add(format('FPTempLength=%d',[i]));if CZKEM1.SetEnrollDataStr(devid, 1, devid, 0, 1, TEMP2, 0) thenMemo1.lines.add('SetEnrollDataStr OK')elseMemo1.lines.add('SetEnrollDataStr Fail.');end;function TForm1.BTimeDecode(const TimeStr: string): integer;varp,m,s: integer;beginp := pos(':', TimeStr);m:=strtointdef(copy(TimeStr,1,p-1),-1);s:=strtointdef(copy(TimeStr,p+1,100),-1);if (m<0) or (s<0) or (m>255) or (s>255) then result := 255; result := m *256+s;end;function TForm1.BTimeEncode(MinuteSecond: integer): string; varm,s: integer;beginm:=MinuteSecond div 256;s:=MinuteSecond mod 256;if (MinuteSecond<0) or (m>59) or (s>59) thenresult := 'No'elseresult := format('%d:%d', [m,s]);end;function TForm1.BNetSpeedDecode(const speed: string): integer; vari: integer;beginresult := NetSpeedValues[0];for i := 0 to length(NetSpeeds)-1 doif speed=NetSpeeds[i] thenbeginresult := NetSpeedValues[i];exit;end;end;function TForm1.BNetSpeedEncode(speed: integer): string;vari: integer;beginresult := NetSpeeds[0];for i := 0 to length(NetSpeeds)-1 doif speed=NetSpeedValues[i] thenbeginresult := NetSpeeds[i];exit;end;end;procedure TForm1.Button4Click(Sender: TObject);beginif SaveDialog1.Execute thenSaveGLogs(SaveDialog1.filename);end;function TForm1.SaveGLogs(const fn: string): integer;vardwEnrollNumber, dwSEnrollNumber, Params3,Params0, Params1, dwManipulation, Params2, dwYear,dwMonth, dwDay, dwHour, dwMinute: Integer;s: string;f: tfilestream;beginresult := 0;f:=tfilestream.Create(fn, fmOpenWrite or fmCreate);tryif CZKEM1.ReadSuperLogData(DevId) thenwhile CZKEM1.GetSuperLogData(DevId, dwEnrollNumber, dwSEnrollNumber, Params3,Params0, Params1, dwManipulation, Params2, dwYear,dwMonth, dwDay, dwHour, dwMinute) dobegins:=format('%5d %5d %5d %5d %5d %5d %d-%d-%d %d:%d'#13#10,[dwSEnrollNumb er, dwManipulation,Params0, Params1, Params2, Params3,dwYear, dwMonth, dwDay, dwHour, dwMinute]);f.Write(s[1],length(s));inc(result);end;finallyf.Free;end;end;procedure TForm1.btnSMSClick(Sender: TObject);beginif btnSMS.Tag=0 thenbegin//CZKEM1.SetSMS(0, 4, 'Welcome to ZK');// CZKEM1.SetSMS(1, 2, 'Meet at 10:00');// CZKEM1.SetSMS(2, 3, 'Write a report for C12 item');//btnSMS.Caption := 'Clear SMS';//btnSMS.Tag:=1;endelsebegin// CZKEM1.SetSMS(0, 0, '');//CZKEM1.SetSMS(1, 0, '');// CZKEM1.SetSMS(2, 0, '');// btnSMS.Caption := 'Set SMS';// btnSMS.Tag:=0;end;end;procedure TForm1.Button7Click(Sender: TObject);varw,h: integer;image: array of byte;beginsetlength(image, 1024*512);w := 80;if CZKEM1.CaptureImage(TRUE, w, h, Image[0], 'fp.bmp') then beginaddinfo('Captured an image.');endelseaddinfo('Capture image fail.');end;procedure TForm1.Button8Click(Sender: TObject);beginif CZKEM1.UpdateFirmware('emfw.cfg') thenbeginaddinfo('UpdateFirmware success.pls restart the devie.');endelseaddinfo('UpdateFirmware fail.');end;procedure TForm1.Button12Click(Sender: TObject);beginCZKEM1.clearLCd;end;procedure TForm1.Button11Click(Sender: TObject);beginczkem1.EnableClock(0);czkem1.WriteLCD(0,0,' *** ');czkem1.WriteLCD(1,0,'Welcome to ZK');czkem1.WriteLCD(2,0,' *** ');czkem1.WriteLCD(3,0,' ');MessageDlg('Close this window to restore lcd display', mtInformation, [mbOK], 0);czkem1.EnableClock(1);end;procedure TForm1.Button14Click(Sender: TObject);beginczkem1.Beep(1000);end;procedure TForm1.Button13Click(Sender: TObject);vari: integer;beginfor i:=0 to 9 dobeginczkem1.PlayVoiceByIndex(i);if MessageDlg('Continue next voice?', mtConfirmation, [mbYes,mbNo], 0) <> mrYes then exit;end;czkem1.PlayVoice(30,29);end;procedure TForm1.Button15Click(Sender: TObject);varErrorCode: integer;beginCZkEM1.CancelOperation;CZkEM1.DelUserTmp(1, 65530, 0);if CZkEM1.StartEnroll(65530, 0) thenAddInfo('Start Enroll a user, UserID=65530, FingerID=0')elsebeginCZkEM1.GetLastError(ErrorCode);AddInfo('StartEnroll Error, Code='+inttostr(ErrorCode));end;end;procedure TForm1.Button16Click(Sender: TObject);varErrorCode: integer;。

相关文档
最新文档