首页 / 软件开发 / Delphi / 第三章-字符串列表及应用(一)(2)
第三章-字符串列表及应用(一)(2)2007-05-083.1.2 装载、保存字符串列表 应用程序可以非常方便的把Delphi字符串列表存入文本文件,或者从文本文件中重新装载(或装入另一个不同的列表),字符串列表有专门的方法处理这类操作。使用LoadFromFile方法从文件中装载字符串列表,LoadFromFile从文本文件中把每一行字符串装入列表中。把列表保存在文件中使用SaveToFile方法,使用时传递文件名的参数。如果文件不存在,SaveToFile将创建它,否则将用列表覆盖现有文件内容。以下代码装入AUTOEXEC.BAT的文件,并以AUTOEXEC.BAK为文件名进行备份。 procedure TForm1.FormCreat(sender:TObject);varFileName:String;beginFileName:="C:AUTOEXEC.BAT";With Memo1 dobeginLoadFromFile(FileName)SaveToFile(ChangeFileExt(FileName,"BAK"));end;end; 3.1.3 创建新的字符串列表 大多数情况下,应用程序使用的字符串列表是做为部件的某一部分,因此不必创建列表,但Delphi允许创建不依赖部件的字符串列表。值得注意的是程序创建的字符串列表必须在使用完之后,释放列表所占用的内存空间。有两种不同的情况需要处理:一是程序以简单的方式创建、使用、释放字符串列表;二是由程序创建,在运行期间均可能使用,在程序终止前释放。这两种情况主要取决于是创建短期字符串列表还是长期字符串列表。 3.1.3.1短期字符串列表 短期字符串列表用于处理简单事物。程序在同一处创建、使用、释放列表。这是最安全的使用字符串列表的方法。因为字符串列表要为自己和它的字符串分配内存,所以要用try..finally对列表进行保护,以确保发生异常后释放列表所占用的内存空间。创建短期字符串列表的基本步骤为:1. 构造字符串列表对象;2. 在try..finally块中使用列表;3. 在finally后释放列表空间。以下代码创建列表、使用列表、最后释放列表空间: procedure TForm1.Button1Click(Sender:Tobject);varTemList:TStrings;beginTemplist:=TStringList.Create;try{ use the string list }finallyTemplist.Free;end;end; 3.1.3.2 长期字符串列表 如果要在程序运行的任何时候使用字符串列表,则需在程序开始运行时就创建列表,并在程序终止前释放。运行时创建字符串列表的步骤为:1. 在程序主窗体对象的域中加入TStringsList类型的域;2. 在主窗体的OnCreate事件中创建句柄,该事件句柄在主窗体显示前运行;3. 在创建事件句柄后,创建字符串列表对象;4. 在主窗体的OnDestroy事件创建句柄,该事件句柄在主窗体消失之前运行。这样,在程序运行过程中,任何过程、事件均能访问该字符串列表。以下代码在程序中加入了一个Clicklist的字符串列表,用户每按一次鼠标键,程序往Clicklist中加入一字符串,程序结束前把该列表存入文件。 unit Unit1; interface uses WinTYpes, WinProcs, Classes, Graphics, Forms, Controls, Apps; typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);private{ Private declarations }public{ Public declarations }ClickList: TStrings; {declare the field}end; varForm1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);beginClickList := TStringList.Create; {construct the list}end; procedure TForm1.FormDestroy(Sender: TObject);beginClickList.SaveToFile(ChangeFileExt(Application.ExeName, ".LOG"));{save the list}ClickList.Free; {destroy the list object}end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginClickList.Add(Format("Click at (%d, %d)", [X, Y])); {add a string to the list}end; end.