3.1.2 裝載、保存字符串列表
應用程序可以非常方便的把Delphi字符串列表存入文本文件,或者從文本文件中重新裝載(或裝入另一個不同的列表),字符串列表有專門的方法處理這類操作。
使用LoadFromFile方法從文件中裝載字符串列表,LoadFromFile從文本文件中把每一行字符串裝入列表中。
把列表保存在文件中使用SaveToFile方法,使用時傳遞文件名的參數。如果文件不存在,SaveToFile將創建它,否則將用列表覆蓋現有文件內容。
以下代碼裝入AUTOEXEC.BAT的文件,並以AUTOEXEC.BAK為文件名進行備份。
procedure TForm1.FormCreat(sender:TObject);
var
FileName:String;
begin
FileName:='C:\AUTOEXEC.BAT';
With Memo1 do
begin
LoadFromFile(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);
var
TemList:TStrings;
begin
Templist:=TStringList.Create;
try
{ use the string list }
finally
Templist.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;
type
TForm1 = 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;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
ClickList := TStringList.Create; {construct the list}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ClickList.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);
begin
ClickList.Add(Format('Click at (%d, %d)', [X, Y])); {add a
string to the list}
end;
end.