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

CBアプリ工房


アプリケーション > 画像ビューアが作りたい! [ 1 | 2 ]

画像ビューアが作りたい! - 2/2

更新 : 2010/01/06

 



コンストラクタでは、画像の読み込みで使うビットマップを用意します。


__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 を使うことで、画像ビューアがお手軽に出来上がりました。


今回作成した、画像ビューアは、ファイル数が限られていました。
拡張する場合は、どのようなファイル数でも読み込めるようにする、セルの大きさを変更可にする、などを考慮してください。

以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。



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