|
コンストラクタでは、画像の読み込みで使うビットマップを用意します。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
bmp = new Graphics::TBitmap;
}
|
デストラクタでビットマップを破棄しています。
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete bmp;
}
|
次は今回もっとも重要なコードです。ほとんどこのコードだけで動いているようなものです。
それでは見ていきましょう。
まず起動時は、ファイルが指定されていないので、処理をしないようにしておきます。
下の Button1OnClick
でファイルが指定されたら、セル位置から格納されるファイルの配列番号を取得して、画像を
bmp に読み込みます。
画像の数だけ処理をしますので、数以上になればそこで処理を止めます。
読み込んだ画像をセルの中央に寄せたいので、マージンを取っています(見てくれだけなので、特にマージンはなくてもかまいません)。そのエリアに画像を
StretchDraw で描画します。
最後にファイル名を追加しておしまいです。
マージンの数値を変えたり、ファイル名の表示位置を変えて、様子を見てください。
void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int Col,
int Row, TRect &Rect, TGridDrawState State)
{
// ファイルがなければ処理しない
if (file[0] == "") return;
// 現在の Col, Row 位置からインデックスを知る
int index = Row * DrawGrid1->ColCount + Col;
// 画像の数以上は処理しない
if (index > 1) return;
// 画像を読み込む
bmp->LoadFromFile(file[index]);
// 画像を中央に寄せるため rect を記録
TRect rect = Classes::Rect(Rect.Left + 12,
Rect.Top + 12,
Rect.Right - 12,
Rect.Bottom - 12);
// 画像をストレッチさせて表示
DrawGrid1->Canvas->StretchDraw(rect, bmp);
// テキストを表示
DrawGrid1->Canvas->TextOut((Rect.Left + 12),
(Rect.Bottom - 12),
file[index]);
}
|
最後のコーディングです。
file
変数に画像を代入しています(作成したアプリケーションと同じフォルダに適当なファイル
"sample1.bmp", "sample2.bmp"
を用意しておいてください)。
ファイルが用意できたら、DrawGrid1
を再描画してフォーカスを当てておきます。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 通常はフォルダからファイル名は取得してくる
file[0] = "sample1.bmp";
file[1] = "sample2.bmp";
DrawGrid1->Refresh();
DrawGrid1->SetFocus();
}
|
以上で、コーディングはおしまいです。
コンパイルして Button1
をクリックしてみてください。画像が一覧できたでしょうか?
DrawGrid
を使うことで、画像ビューアがお手軽に出来上がりました。
今回作成した、画像ビューアは、ファイル数が限られていました。
拡張する場合は、どのようなファイル数でも読み込めるようにする、セルの大きさを変更可にする、などを考慮してください。
以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。
|
|