关爱女性——从《风采半边天》看软件的自动记忆功能
编程爱好者
本期为大家介绍的这个生活实用程序名叫《风采半边天——呵护女性健康》,它为大家介绍了常见妇科疾病与保健等知识。下面我们一起来看看这款软件的编程技巧,它采用Delphi7.0编写。
软件下载网址:http://www.cpcw.com/xz/09shenghuo.rar
一、简单的操作
界面上方有“妇科疾病与预防”、“乳腺疾病与保健”等几个按钮,点击其中一个按钮后,界面下方就显示关于此板块的知识集合,点击界面上边的“上一条”按钮可以查看此板块的前一条记录,点击“下一条”按钮可以查看此板块的后一条记录。
软件还有自动记忆功能,当关闭软件后,程序记录下此界面,下次启动软件时自动显示最后一次退出软件时的界面。
二、自动记忆功能
软件的自动记忆功能其实就是使用了读写ini文件的方法。ini文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,在Delphi中操作ini文件非常简捷,这是因为Delphi提供了一个TInifile类,使我们可以非常灵活地处理ini文件,下面简单介绍有关ini的知识和如何读写ini:
1.ini文件的结构
;注释
[小节名]
关键字=值
...
ini文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。
值的类型有三种:字符串、整型数值和布尔值。其中字符串存储在ini文件中时没有引号,布尔真值用1表示,布尔假值用0表示。注释以分号“;”开头。
2.定义
(1)在Interface的Uses节增加IniFiles;
(2)在Var变量定义部分增加一行:
MyIniFile: TIniFile;
然后,就可以对变量MyIniFile进行创建、打开、读取、写入等操作了。
在本程序中,先在项目文件所在的文件夹内新建一个文本文件,然后更改文件名为myapp,更改扩展名为ini。由于当关闭程序时要记忆关闭时的界面,在主窗体的“退出”按钮的OnClick事件中写入:
procedure TForm1.LbButton7Click(Sender: TObject);
var
MyIniFile: TIniFile;
strConn:string;
begin
MyIniFile := TIniFile.Create(Extract
FilePath(Paramstr(0))+'myapp.ini');
myinifile.Writestring('SqlConn','ConnString',Label1.Caption); //把文章标题写到ini文件中然后关闭应用程序
Application.Terminate;
end;
我们到Windows资源管理器中打开myapp.ini文件,看到的内容为:
[SqlConn]
ConnString=更年期的用药
此时我们已经对ini的写入成功了,下面将在程序启动时读取ini,显示此文章标题,并确定此文章标题所对应的文章内容。这里先对数据库进行说明,采用Access建立的数据库,共六张表,表名分别为fukejibing、ruxianjibing、jingqibaojian、gengnianqibaojian、nvxingyingyang、shengzhijiankang。每张表都由两个字段构成:title、content,第一个字段为文章标题,第二个字段为文章内容。在Form1.FormShow事件中写入:
procedure TForm1.FormShow(Sender: TObject);
var
MyIniFile: TIniFile;
strConn:string;
title:string;
i:integer;
begin
MyIniFile := TIniFile.Create(Extract
FilePath(Paramstr(0))+'myapp.ini');
title:= myinifile.readstring('SqlConn','ConnString',''); //把ini的“更年期的用药”读取出来赋给title变量
Label1.caption:=title; //显示标题
ADODataSet.Close;
ADODataSet.CommandText:= 'select * from fukejibing where title=''' + title + ''''; //在表read1中查询记录中是否有满足字段title的值为“更年期的用药”的记录
ADODataSet.Open;
if ADODataSet.RecordCount>0 then//如果有则把此记录的content的值显示在memo中
begin
Memo1.Lines.Add(ADODataSet.FieldByName('content').AsString);
Memo1.SelStart := 0;
Memo1.SelLength := 0;
exit;
end;
if ADODataSet.RecordCount<1 then/如果没有满足的记录,查询下一张表是否有满足条件的记录
begin
ADODataSet.Close;
ADODataSet.CommandText:= 'select * from ruxianjibing where title=''' + title + '''';
ADODataSet.Open;
if ADODataSet.RecordCount>0 then
begin
Memo1.Lines.Add(ADODataSet.Field
ByName('content').AsString);
Memo1.SelStart := 0;
Memo1.SelLength := 0;
exit;
end;
end;
…………
end;