エンタープライズ:特集 2003/07/18 11:58:00 更新
C Magazine

[C Magazine連載]プログラムのレシピ(第1回)
デスクトップメモを作る (7/9)

C MAGAZINE 2002年9月号より転載

タブ画像の選択
 次は、見た目の部分をもう少し作り込みましょう。このデスクトップメモでは、テキスト入力領域の左側に「タブ」という領域を設けて、ここに好きな画像を表示できるようにします。絵柄は複数枚の中から選べるようにして、また各絵柄について「通常状態」と「アクティブ状態」を用意します。

 Fig.12-(a)〜(f)がタブの例です。(a)と(b)、(c)と(d)、(e)と(f)がそれぞれ組になっています。(a)/(c)/(e)が通常状態、(b)/(d)/(f)がアクティブ状態です。このようにメモの内容別に絵柄を分けておくと、たとえば「仕事に関するメモ」や「遊びに関するメモ」が見つけやすいかと思います。また差し迫った予定をアクティブ状態にしておけば、大事な予定を忘れずに済むでしょう。

Fig.12
Fig.12 タブの絵柄の例

 多くの絵柄を管理するとなるとプログラムがややこしくなりそうですが、案外そうでもありません。今回は絵柄のファイル名を工夫して、プログラムを簡単にしました。

 Fig.12の絵柄は、すべて64ピクセル×64ピクセルのビットマップファイルです。Fig.12-(a)〜(f)に対応するおのおののファイル名は、次のようになっています。
(a)normal_ひぐ.bmp
(b)active_ひぐ.bmp
(c)normal_ぺん.bmp
(d)active_ぺん.bmp
(e)normal_パンダ.bmp
(f)active_パンダ.bmp

 これらのファイルは、アプリケーションの実行ファイルと同じフォルダに入れておきます。そして、次のような手順でファイルを読み込みます。

(1)「normal_*.bmp」という名前のファイルを探す。*の部分は任意の文字列

(2)ファイルが見つかったら、通常状態の画像として読み込む

(3)次に「*」の部分の文字列を取り出して、「active_*.bmp」という名前のファイルを探す

(4)ファイルが見つかったら、通常状態の画像に対応するアクティブ状態の画像として読み込む

(5)画像を選択するためのメニュー項目をポップアップメニューに追加する

(6)(1)に戻って、ファイルが見つかる限り繰り返す

 このようにすれば、ファイルの数がいくつになっても大丈夫です。またファイル名のつけ方さえ同じにすれば、プログラムに変更を加えなくても、ユーザが自由に画像を追加することができます。

●プログラム例

 List 10はタブ画像をロードする処理です。まずList 10-(1)では、実行フォルダにある「normal_*.bmp」という画像ファイルを探します。フォルダ内にある特定の名前のファイルをすべて探すには、FindFirst関数(List 10-(1))とFindNext関数(List 10-(3))を使います。Win32 APIの場合には、FindFirstFile関数とFindNextFile関数がこれに相当します。

List 10 タブ画像のロード

// タブ画像をロードする
void TConsoleForm::LoadTabs() {
   TSearchRec file;
   TTab *tab;
   AnsiString s;
   int i,j;

   //========================================================= (1)
   // 実行ファイルがあるフォルダのタブ画像を全てロードする
   // ノーマルタブ画像:"normal_名前.bmp"
   // アクティブタブ画像:"active_名前.bmp"
   // 「フィルタ」メニューに項目を登録する
   SetCurrentDir(ExtractFilePath(Application->ExeName));
   if (FindFirst("normal_*.bmp", faAnyFile, file)==0) {
       do {

           //================================================= (2)
           // ノーマルタブ
           tab=new TTab();
           TabList->Add(tab);
           tab->NormalBitmap=new Graphics::TBitmap();
           tab->NormalBitmap->LoadFromFile(file.Name);
           BitmapList->Add(tab->NormalBitmap);

           // タブ名
           i=file.Name.Pos("_");
           j=file.Name.Pos(".bmp");
           tab->Name=file.Name.SubString(i+1,j-i-1);

           // アクティブタブ
           s="active_"+tab->Name+".bmp";
           if (FileExists(s)) {
               tab->ActiveBitmap=new Graphics::TBitmap();
               tab->ActiveBitmap->LoadFromFile(s);
               BitmapList->Add(tab->ActiveBitmap);
           } else {
               tab->ActiveBitmap=tab->NormalBitmap;
           }

       //===================================================== (3)
       // 次のファイルをロードする
       } while (FindNext(file)==0);
   }
}

 List 10-(2)は、ファイル名の解釈とファイルのロードです。先ほど説明した手順で、「normal_*.bmp」というファイル名から「*」の部分を取り出し、「active_*.bmp」というファイル名を作ります。そして、通常状態とアクティブ状態の画像ファイルをそれぞれロードします。

[C Magazine連載]プログラムのレシピ(第1回)
(1)連載のはじめに
(2)どんな機能を作るか
(3)作成のポイント
(4)タスクトレイの操作
(5)メモの作成と表示
(6)メモデータの保存と読み込み
(7)タブ画像の選択
(8)日程管理機能
(9)まとめ
・実行ファイル/リソース一式(.lzh形式/1.32MB)
・リスト(.lzh形式/5.45KB)

関連リンク
▼C MAGAZINE
▼定期購読のご案内
▼バックナンバー一覧
▼バックナンバー販売協力店
▼ひぐぺん工房
▼「デスクトップマスコットを作ろう」紹介ページ
▼「デスクトップマスコットを作ろう」著者ページ

前のページ | 1 2 3 4 5 6 7 8 9 | 次のページ

[松浦健一郎(ひぐぺん工房),C MAGAZINE]