高手坐镇(1)
数字职场
限制软件使用次数
解题高手:曾虹云
题目奖励:★★★★★
读者来信:我开发了一个小软件,这个软件我想做成共享性质的,免费提供给用户使用几次后,如果用户想继续使用则必须付费。我朋友推荐我用数据库的方式来限制软件使用次数,我自己没有搞出来,特来请教。
曾虹云:在软件启动的时候秘密在用户的某一个目录下动态创建一个数据库(创建前先判断数据库是否存在),在数据库中创建一张表和一个字段,字段的值用于监控用户使用软件的次数。用户每次启动软件的时候扫描字段的值,并判断字段的值是否超过了软件的使用次数,如果没有超过则把字段的值加1,并允许用户使用软件;如果超过了则软件关闭。

动态创建数据库:
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; //显示曲线