ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

TListにアイコンを追加する 

更新 : 2012/09/23

 


解説:
複数の画像管理には、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;
}
//-------------------------------------------------------------------
 



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.