高手坐镇(1)

数字职场

限制软件使用次数

解题高手:曾虹云

题目奖励:★★★★★

读者来信:我开发了一个小软件,这个软件我想做成共享性质的,免费提供给用户使用几次后,如果用户想继续使用则必须付费。我朋友推荐我用数据库的方式来限制软件使用次数,我自己没有搞出来,特来请教。

曾虹云:在软件启动的时候秘密在用户的某一个目录下动态创建一个数据库(创建前先判断数据库是否存在),在数据库中创建一张表和一个字段,字段的值用于监控用户使用软件的次数。用户每次启动软件的时候扫描字段的值,并判断字段的值是否超过了软件的使用次数,如果没有超过则把字段的值加1,并允许用户使用软件;如果超过了则软件关闭。

f13-222-2.jpg

动态创建数据库:

var

CreateAccess:OleVariant;

tmp1:integer;

begin//建立Access文件,如果文件存在则不再创建数据库

if FileExists('c:\aaa.mdb')=false then//数据库不存在

begin

CreateAccess:=CreateOleObject('ADOX.Catalog');

CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\aaa.mdb;Jet OLEDB:Database Password=123');//在D盘下创建数据库,并设置数据库密码

Query1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\aaa.mdb;Jet OLEDB:Database Password=123';

with Query1 do

begin

close;

sql.clear;

sql.add('CREATE TABLE a (num integer)');//创建表和字段

execsql;

end;

采用这种方法后,若软件到期,无论用户搜索注册表或者重新安装软件都不能继续使用,除非缴纳一定费用由开发人员给出注册程序(把num的值设置为0)才能继续使用。

无标题栏也拖动窗体

解题高手:风之痕

题目奖励:★★★★

读者来信:根据实际需要,我的软件的窗体是没有标题栏的。但是标准窗体中我们在标题栏中按住鼠标左键不放就可以拖动,窗体就可以在屏幕中移动位置,我也想在我的软件中实现拖动窗体,请问可以实现吗?

风之痕: 这个就需要调用API函数来实现了,我们在FormMouseDown事件中进行处理,先使用函数ReleaseCapture释放鼠标,然后向系统发送消息来实现拖动:SendMessage(Handle, WM_SYSCOMMAND, $F012, 0)。

数据变成趋势曲线

解题高手:笨笨

题目难度:★★★★

开发QQ群:我用数据库做数据统计(Delphi),我想把表中的数据做成趋势曲线显示在窗体中,这样可以直观查看数据的变化趋势,请问怎么实现?

笨笨:在Delphi中用DBChart就能满足你的要求,DBChart是专门用于数据图标的控件。

DBChart1.Series[0].DataSource :=fat_main.ADODataSetcurve;//指定曲线的数据源

DBChart1.Series[0].XValues.ValueSource:='time';//x轴的时间采用的数据是time字段

DBChart1.BottomAxis.DateTimeFormat:='yyyy-mm-dd'; //时间显示的方式是年-月-日的方式

DBChart1.Series[0].YValues.ValueSource:='lb'; //y轴的重量采用的是数据库的字段

DBChart1.Legend.Visible := True; //显示曲线