Delphi應用程序經常要處理字符串列表,如組合框和列表框中的字符串,TMemo部件的文本行,屏幕支持的字體列表,TNotebook部件的tabs屬性,字符串網格的行、列等等。
雖然應用程序以不同的方法使用這些列表,但Delphi通過一個叫字符串列表(Tstrings)的對象提供統一的界面,並且在不同場合可相互轉化。例如,可以在TMemo部件中編輯某一字符串,並把它當成列表框中列表項使用。
在Delphi集成開發環境中也經常要使用字符串列表。如在Object Inspector窗體的取值欄中常列有Tstrings字符,雙擊該字符,將彈出字符列表編輯器,如圖3.1,在編輯器中可進行編輯、加入、刪除等操作 。
在運行狀態時也可以操作字符串列表,常見的字符串列表操作如下:
● 列表中操作字符串
● 裝載、保存字符串列表
● 創建字符串列表
● 在字符串列表中加入對象
本章將介紹字符串列表的常用操作及簡單應用。
3.1 字符串列表的常用操作
3.1.1 列表中操作字符串
在Delphi應用程序中,經常要對列表中的字符串進行操作。例如,設計時修改字符串列表屬性。
常見的字符串操作如下:
● 計算列表中字符串數目
● 訪問指定字符串
● 查找字符串的位置
● 往列表中加入字符串
● 刪除列表中的字符串
● 在列表中移動字符串
● 復制一個完整的字符串列表
● 復制列表中的字符串
3.1.1.1 計算列表中的字符串數目
使用Count屬性可計算列表中的字符串數目。Count是只讀屬性,用以指示列表中字符串列表數目。因為字符串列表是以零開始索引,因而Count比列表的最大索引數大一。
例如,應用程序想計算當前屏幕支持的字體數目,可查找屏幕對象的字體列表,該列表包含了屏幕支持的所有字體的名字。
FontCount:=Screen.Fonts.Count;
3.1.1.2 訪問指定字符串
字符串列表有一個可索引的Strings屬性,可象使用字符串數組一樣使用Strings。例如,列表中第一個字符串為Strings[0]。因為Strings屬性為字符串列表中最常用的屬性,Strings屬性可做為字符串列表的缺省屬性,即使用時可省略Strings標識符。
要訪問字符串中的指定字符,可查找該字符的起始位置或索引。字符串數目是以零開始記數的。如果列表中有三個字符串,其索引范圍為0..2。
以下代碼是等價的:
Memol.Lines.Strings[0]:='This is the first line.';
Memol.Lines[0]:='This is the first line.';
3.1.1.3 查找字符串的位置
Indexof方法可查找指定字符串的位置。Indexof有一個字符串類型的參數,方法返回列表中匹配字符串的位置。如果列表中無匹配字符串,將返回- 1。
Indexof方法只能查找完整字符串,即必須完全匹配整個字符串。如果只匹配部分字符串,必須編寫相應代碼。
以下代碼判定列表中是否有指定字符串:
if FileListBox1.Items.IndexOf('AUTOEXEC.BAT') > -1 then
begin
Color := clYellow;
Label1.Caption := 'You are in the root directory!';
end;
3.1.1.4 在列表中加入字符串
有兩種方式往列表中加入字符串:可把字符串加到列表的最後,也可插入列表之中。
要把字符串加至列表尾部,使用Add方法,把字符串作為參數傳遞。
要把字符串插入列表中,使用Insert方法,傳遞兩個參數:插入的位置和字符串。
例如,要把“Three”插入至列表中的第三個位置,使用代碼Insert(2,'Three')。如果列表中的字符不到2個,Delphi將產生超出索引范圍的異常(關於異常詳見十二章)。
3.1.1.5 在列表中移動字符串
應用程序可以在列表中把指定字符串移至另一個位置,如果字符串與某個對象相連,則該對象與字符串同步移動。
Move方法可實現字符串的移動,它有兩個參數:現行位置和要移動的位置。以下代碼把第三個字符串移至第五的位置:
Move(2,4);
3.1.1.6 刪除列表中的字符串
使用Delete方法可以刪除指定的字符串。Delete的參數是指定字符串的位置,如果不知道字符串的位置,可使用Indexof方法。
要刪除字符串列表中所有的字符串,可使用Clear方法。
以下代碼刪除列表框中的指定字符串:
With ListBox1.Items do
begin
if Indexof('bureaucracy')>-1 then
Delete (Indexof('bureaucracy'));
end;
3.1.1.7 復制完整的字符串列表
把一個列表復制到另一個列表相當於把源列表賦值給目標列表,即使列表從屬於不同的部件,Delphi也可以進行這種復制。
復制列表將覆蓋掉目標列表,如果要把源列表加到目標列表的尾部,使用Addstrings方法。
以下代碼分別為復制列表和連接列表:
Outline1.Lines:=ComboBox1.Items;
Outline1.Addstrings(ComboBox1.Items);
3.1.1.8 重復操作列表中的字符串
很多情況需要對表中的每一個字符串進行操作,如改變字符串的大小寫。象這種重復操作可以用 for 循環來實現,同時使用列表的整數類型的索引。
以下代碼對列表框的字符串進行重復操作。當用戶按下按鈕時,對列表框中的字符串進行大小寫轉換。
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to ListBox1.Items.Count -1 do
ListBox1.Items[I] := UpperCase(ListBox1.Items[I]);
end;