delphi.gif (306 バイト) TStringsの使い方


ListBoxやMemoなどで文字列を表すのにTStringsが使われています。このクラスは単独で使って文字列を管理するのにも便利です。

また、TStringsは文字列のリストだけでなく、オブジェクトのリストも管理できます

 

toach.gif (917 バイト) 文字列リストの作成

文字列リストはTStringsで宣言しますが、コンストラクタはTStringListを使用します。

var
  strlist: TStrings;
  ......
  strlist := TStringList.Create;

 

toach.gif (917 バイト) 文字列の読み込みと保存

文字列の読み込みはLoadFromFileメソッドを使用します。文字列の保存はSaveToFileを使用します。

strlist.LoadFromFile('DATA.TXT');

 

toach.gif (917 バイト) 文字列の操作

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で解放するようにします。(下記オブジェクトの操作の例参照)

 

toach.gif (917 バイト) オブジェクトの操作

つぎの例は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;