-- 作者:狐狸爸爸
-- 发布时间:2009/4/15 1:08:00
-- 4月14日更新,新增两个重要功能。
保存设置信息
一个完整的系统,通常会提供一些自定义的设置给用户,以便满足不同的用户需要。 FoxTable提供了两个函数,分别用于保存和读取设置信息。
SaveConfigValue
保存设置信息
语法:
SaveConfigValue(Name, Value)
Name: 设置名称 Value: 设置值
设置信息经过加密储存,安全性比一般的方式更有保证。
GetConfigValue
读取设置信息。
语法:
GetConfigValue(Name, DefaultValue)
Name: 设置名称 DefaultValue:默认设置值,如果指定名称的设置不存在,则返回此值。
示例
假定你提供给客户的是一个试用版本,希望最多使用30次,可以在项目事件AfterProject事件中加入如下代码:
Dim n As Integer n = GetConfigValue("Count",1) \'假定保存试用次数的设置名称为Count If n > 30 Then Messagebox.Show("您正在使用的产品已经超出试用次数!") Syscmd.Project.Exit() Else n = n + 1 SaveConfigValue("Count",n) End If
提示:
1、如果启动项目而不保存,是不会计算试用次数的。 2、在重新发布系统前,请用SaveConfigValue方法重置试用次数。
设计自己的注册系统
如果你基于Foxtable设计了应用软件,而且希望能够发行并收取一定的注册费,那么就必须建立一套基于电脑硬件的软件注册系统。 设计这样的系统并不复杂,复杂的是如何获得电脑的硬件信息。
Foxtable提供了一个全局变量ComputerId,该变量返回12个字符,前4位表示硬盘信息,中间4位表示主板信息,最后4位表示CPU信息。 不同的电脑有不同的ComputerId,而且即使格式化硬盘重新安装系统,ComputerId的返回值也不会改变。
示例
本示例可以参考CaseStudy目录下的文件“注册系统设计演示.Table”。
假定你提供了一个项目给客户试用,希望前30次正常启动,30次后出现注册窗口,60次后如果没有注册,则拒绝进入。
设计步骤:
1、设计一个注册码输入窗口,窗口类型为模式,窗口名称为“注册”,窗口中的控件如下图:
此主题相关图片如下:1025.gif
2、将窗口的AfterLoad事件设为:
e.Form.Controls( "TextBox1").Value = ComputerId e.Form.Controls("TextBox2").Value = GetConfigValue("Register" & ComputerId, "")
因为可能有不同的电脑使用项目,所以用于保存注册码的设置名称必须包括机器码,以避免注册码被覆盖。
3、将窗口中“确定”按钮的代码设为:
SaveConfigValue( "Register" & ComputerId, e.Form.Controls("TextBox2").Value) e.Form.Close()
4、最后将项目的AfterOpenProject事件设为:
Dim n As Integer = GetConfigValue("Count",1) Dim Code As String = GetConfigValue("Register" & ComputerId,"") Dim Ok As Boolean If Code > "" AndAlso DecryptText(Code,"abc","abc") = ComputerId Then \'如果注册码正确 OK = True Else If n > 30 Then Forms("注册").Open() Code = GetConfigValue("Register" & ComputerId,"") If Code > "" AndAlso DecryptText(Code,"abc","abc") = ComputerId Then \'如果注册码正确 OK = True End If End If If n > 60 AndAlso Ok = False Then Messagebox.Show("您正在使用的产品已经超出试用次数!") Syscmd.Project.Exit() End If End If n = n + 1 SaveConfigValue("Count",n)
至此我们为自己的项目文件加上了试用和注册功能,用户提供机器码之后,可以再命令窗口执行下面的代码计算得出注册码:
Output.Show(EncryptText( "用户提供的机器码","abc","abc"))
实际应用的时候,注册码的计算和比较规则应该会比这复杂很多,为避免重复编码,可以使用自定义函数。
|