|
||
解説: 複数の画像管理には、ImageListを使うことが多いと思います。ImageListは、アイコンまたはビットマップなど、多くのイメージを保持でき、インデックスで取り出すことができるので、効率の良い処理ができます。 今回は、ImageListを使わない方法、TListオブジェクトを使った管理を試してみます。 TListはオブジェクトへのポインタのリストが保持されますので、オブジェクトを追加したり削除したりできます。他にもいろいろなプロパティ、メソッドがありますので詳細はヘルプを参照してください。 使用例: 以下の例では、アプリケーション起動後、アイコンをTListオブジェクトに登録します。 登録したアイコンを、Botton1をクリックすることでインデックス順に表示させています。 準備としてはButton二つとImageを適当に配置します。 事前にアプリケーションと同じフォルダに"1.ico","2.ico"を用意しておいてください。 最初に各イベントで使えるようにTListオブジェクトを宣言しておきます。 OnCreateイベントハンドラではnewキーワードを使用して、TListオブジェクトを作成しています。 OnDestroyイベントハンドラでは 作成したTListオブジェクトを破棄しています。 同時にリストに追加した項目も破棄しておきます。 Buton1のOnClick イベントハンドラではLoadFromFileメソッドでTPictureにアイコンを読み込み保持させています。 次に、TListのAdd メソッドを呼び出し、Items配列の最後にオブジェクトを追加していきます。 Buton2のOnClick イベントハンドラではTPictureのAssign メソッドでTListのItems配列から指定されたオブジェクトをImage1にコピーします。 Buton1のOnClickを繰り返すと、どんどんListにオブジェクトが追加されてしまいますので、実際にはちょっとコードを工夫してください。 TList *List; //------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { List = new TList; } //------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { for (int i = 0; i < List->Count; i++) delete List->Items[i]; delete List; } //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i = 0; i < 2; i++) { TPicture *pic = new TPicture; pic->LoadFromFile(IntToStr(i + 1) + ".ico"); List->Add(pic); } } //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { static int pos = 0; Image1->Picture->Assign((TPicture*)List->Items[pos++]); if (pos == 2) pos = 0; } //------------------------------------------------------------------- |
||