我们平时用的很多软件都具有一些记忆功能,如foxmail和TheBat等等。
这些软件能在启动时自动的保持上一次关闭软件时的一些状态,如窗口的初始位置,用户在软件中设置的一些特性(如窗口风格,横相排列还是竖相排列等等),如果能让我们的程序也具有这样的一些功能可以使我们程序看起来更专业性一些:) 这里我就来讲一下怎样使应用程序能记住上一次关闭时的窗口位置,并在下一次启动时和上一次的位置一样。
既然要保留信息,就一定要涉及到存贮的问题。数据的存贮有好几种办法,可以写.ini或.inf文件,还可以用Delphi提供的文件类来自定义一个文件,还可以用数据库接口(如ODBC)引入一种数据库文件,foxpro 的.dbf和Access的.mdb比较常用,还可以直接往Windows的注册表里写。写.ini和.inf文件没有任何的安全性,且不适合win95,还记得在94,95年时用中文的Windows3.2中大量的用到了.ini文件,但Windows95出现后,微软建议尽可能的把信息写到注册表中。用ODBC的话会给程序带来很多不必要的麻烦,如会使程序更加复杂,需要相应的DBMS的驱动程序的支持,如果没有相应数据源的驱动程序,则该数据源就不能使用,还有安全性问题也不能很好的解决。
在这里推荐使用写注册表的方法。因为这种方法很方便,不需太多额外的开销,程序比较简单,对一般的用户来说在注册表里找到有用的信息比打开.ini文件要麻烦的多。所以注册表的安全性比.ini文件要略强一些。
使应用程序能记住上一次关闭时的窗口位置,并在这一次启动时和上一次的位置一样。总体思路是这样的:在关闭程序时要记录下本次程序结束时的信息,写入注册表中,在下次程序启动时读注册表中相应信息,并赋给程序。
对于我们这个程序来说主要需要记录的信息是窗口关闭时的Top,Left,Height,Width。
注意:要想使Delphi可以操作注册表,必须包括registry单元。
以下是源程序和相关注释:
unit Unit1;
interface
uses
Windows, Messages,. . . . . . . ,registry;
//包括registry单元
type
TForm1 = class(Tform)
.
.
.
public
ww:Tregistry;
//声明一个Tregistry对象,我们就通过ww来