TStringsの使い方
ListBoxやMemoなどで文字列を表すのにTStringsが使われています。このクラスは単独で使って文字列を管理するのにも便利です。
また、TStringsは文字列のリストだけでなく、オブジェクトのリストも管理できます。
文字列リストの作成
文字列リストはTStringsで宣言しますが、コンストラクタはTStringListを使用します。
例
var strlist: TStrings; ......
strlist := TStringList.Create;
文字列の読み込みと保存
文字列の読み込みはLoadFromFileメソッドを使用します。文字列の保存はSaveToFileを使用します。
例
strlist.LoadFromFile('DATA.TXT');
文字列の操作
1つのルーチン内部だけで文字列の構築、使用、廃棄を行うときは、try..finallyブロックで保護して例外が発生したときに、文字列リストと文字列自体のオブジェクトが確実に解放されるようにします。
例
try
strlist.Add('String 1');
strlist.Add('String 2');
strlist.Add('String 3');
strlist.Add('String 4');
for i := 0 to strlist.Count - 1 do
Writeln(strlist.Strings[i]);
finally
strlist.Free;
end;
複数のルーチンにまたがって文字列リストを使用するときは、OnCreateで文字列リストを作成して、OnDestroyで解放するようにします。(下記オブジェクトの操作の例参照)
オブジェクトの操作
つぎの例はImageをStringsにリストとして管理し、オブジェクト配列として利用する例です。
procedure TForm1.FormCreate(Sender: TObject);
begin
objlist := TStringList.Create;
objlist.AddObject('Apple', Image1);
objlist.AddObject('Grape', Image2);
objlist.AddObject('Lemon', Image3);
objlist.AddObject('Melon', Image4);
txtNumber.Text := IntToStr(objlist.Count - 1);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
objlist.Free;
end;
procedure TForm1.cmdShowClick(Sender: TObject);
var
img: TImage;
i: Integer;
begin
i := StrToInt(txtNumber.Text);
img := objlist.Objects[i] as TImage; // asによるキャスト
Image5.Picture := img.Picture;
end;