Foxtable(狐表)用户栏目专家坐堂 → 4月14日更新,新增两个重要功能。


  共有30912人关注过本帖树形打印复制链接

主题:4月14日更新,新增两个重要功能。

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
4月14日更新,新增两个重要功能。  发帖心情 Post By:2009/4/15 1:08:00 [显示全部帖子]

保存设置信息


一个完整的系统,通常会提供一些自定义的设置给用户,以便满足不同的用户需要。
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"))


实际应用的时候,注册码的计算和比较规则应该会比这复杂很多,为避免重复编码,可以使用自定义函数。



 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 9:16:00 [显示全部帖子]

以下是引用yuansq在2009-4-15 9:09:00的发言:
count 是自定义的 随便你叫什么 估计得先SaveConfigValue一次 才能正确getconfigvalue


不用的,因为getconfigvalue的第二个参数可以指定默认值,如果设置不存在,就返回默认值,如果存在,就返回设置值。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 9:24:00 [显示全部帖子]

那是因为输入的注册码不正确

图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 9:27:00 [显示全部帖子]

SaveConfigValue谁也看不到,只能通过GetConfigValue取得
进入系统后,再打开窗口,删除错误的注册码。

我提供的是一个简单的例子,注册码的计算和判断很简单,请根据自己的需要修改。

[此贴子已经被作者于2009-4-15 9:28:29编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 9:57:00 [显示全部帖子]

以下是引用菜鸟foxtable在2009-4-15 9:42:00的发言:
假如:设计的系统是采用SQL数据库,而录入修改删除完全用SQL语句,比如:INSERT INTO /UPDATE SET/DELECT,那个使用次数的设置还会有效吗?图片点击可在新窗口打开查看

你可以测试一下是否有效,如果没有效,可以在BeforeCloseProject加入:

Syscmd.Project.Save()

这样只要打开项目就有效,不管是否保存。

代码是灵活的,想怎样都行。

[此贴子已经被作者于2009-4-15 10:02:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 10:10:00 [显示全部帖子]

不过通过保存项目来保存设置值的话,付出比较多,还是加一个单独保存设置值的方法算了。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 11:05:00 [显示全部帖子]

补充三个方法:
 

SaveAllConfigItem


保存所有的设置,无参数。
在默认情况下,只有单击菜单中的保存按钮,设置信息才会保存。
如果希望单独或者强制保存设置信息,可执行此方法。


RemoveConfigItem


删除指定名称的设置。


语法:


RemoveConfigItem(Name)


Name: 要删除的设置名称。


ClearConfigItem


删除所有的设置,无参数。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 11:08:00 [显示全部帖子]

以下是引用enirilt在2009-4-15 11:06:00的发言:
硬盘ID是可以改的,有这样软件在网上有


1、不能永久改的。
2、ComputerID还包括主板和CPUID


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 11:20:00 [显示全部帖子]

以下是引用yuansq在2009-4-15 11:13:00的发言:
注册问题应该是开发版更应该考虑的问题吧,商业版需要没台机器都注册的,直接在狐表的注册码基础上加以修改不是更好么,不过要等商业版发布后,也要老六提供这个功能才行啊。


呵呵,foxtable的注册码不会和易表一样允许自己加了。
商业版和开发版的注册功能,都必须自己实现,可用本贴介绍的方法,也可以用自己的方法,怎么折腾都行。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/15 16:05:00 [显示全部帖子]

以下是引用cpayinyuan在2009-4-15 15:49:00的发言:

4月14日的版本中,代码编辑器中的剪切和粘贴好像不能用?(但复制/粘贴能正用使用)


我看看


 回到顶部
总数 11 1 2 下一页