关爱女性——从《风采半边天》看软件的自动记忆功能

编程爱好者

本期为大家介绍的这个生活实用程序名叫《风采半边天——呵护女性健康》,它为大家介绍了常见妇科疾病与保健等知识。下面我们一起来看看这款软件的编程技巧,它采用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;