このファーストガイドは、これから C++Builder 2009を使い始める初心者の方を対象に 10回に分けて基本的事項を説明していきます。

第四回は、C++Builder 2009のプログラミング手順の前編としまして「プロジェクトの作成」から「プログラムの実行」までの基本的な開発手順を説明します。
本章では、この流れを通してC++Builderにおける開発スタイルを理解していただくことを目的としています。

C++Builderの開発スタイル
C++Builderの基本的な開発スタイルは、コーディングとビジュアルプログラミングを組み合わせて行います。
ビジュアルプログラミングとは、ツールパレット内のボタンやテキストボックスといったコンポーネントをマウス操作によってフォーム上へ配置してプログラムを作成する手法です。ビシュアルプログラミングでは、配置したコンポーネントを「プロパティ」と呼ばれる属性値をオブジェクトインスペクタで設定をすることによって、コーディングをしなくても外観や振る舞いが変更できます。
そしてプロパティを変更するとその内容がリアルタイムにコンポーネントへ反映され、プログラムを実行した時と同じ様子を実際に目で確認しながらプログラム設計が行えます。またユーザーのアクション(例えば、マウスをクリックする、キーボード入力を行うなど)は、コンポーネントのイベントを引き起こします。これに対するプログラム処理は「イベントハンドラ」と呼ばれるイベントに応答するコードを記述するだけで良いのです。
このようにユーザーインターフェースに関わる部分の設計はデザイナ機能に任せ、開発者はコーディングが必要なビジネスロジックだけに専念できる点がC++Builderにおける開発スタイルのメリットです。
特にWindowsネイティブ・アプリケーション開発の分野では、その生産性の高さをいかんなく発揮することができます。

プログラミング手順の概要
次の節から簡単なVCLフォーム(Windows)アプリケーションの作成を通して、プロジェクトを構成しているファイルやC++Builderのデザイナ機能の使い方、それにプロジェクトのメイクやそれによって生成されるファイルなど、以下の手順で見ていきたいと思います。
1.プロジェクトの作成
2.コンポーネントの配置
3.プロパティの設定
4.イベントハンドラの設定
5.プロジェクトのメイク
6.プログラムの実行

1. プロジェクトの作成

1.1 新規プロジェクトの作成
VCLフォームアプリケーションのプロジェクトを新規作成するには、メニューバーの[ファイル]-[新規作成]-[VCLフォームアプリケーション]を選択します。

図1: 新規プロジェクト

新規プロジェクトが作成され、フォームが1つ表示される状態になります。=> 図1の(1)を参照
そして、プロジェクトマネージャには、現在作業中のプロジェクトグループとプロジェクトの構成が表示されています。=> 図1の(2) を参照
デフォルトのプロジェクトの場合、プロジェクトソース(Project1.cpp)とユニット(Unit1)のツリーがあります。Unit1のツリーの「+」マークをクリックすると、さらにフォームのソースコードと、フォームのツリーに分かれます。

1.2 C++Builderのプロジェクトを構成するファイル
C++Builderでの開発は、プロジェクト単位で進めます。
以下、C++Builderのプロジェクトを構成するファイル要素について簡単に説明します。
C++Builderの開発でプロジェクトが扱うファイルは、次の通りです。
ファイルの拡張子 |
説明 |
.cpp |
C++ソースファイルで、実行部分のコードを記述します。 |
.h |
C++ヘッダファイルで、宣言部分のコードを記述します。.cppとは別に扱います。 |
.dfm |
フォームファイルで、フォームやフォーム上に配置されたコンポーネントのプロパティ設定値を保管します。 |
.dsk |
C++Builderの統合開発環境の状態を記憶するファイルです。例えば、メインフォームやオブジェクトインスペクタ、コードエディタ、フォームの表示位置や大きさを保持し、プロジェクトを開くと前回閉じた時の状態を復元します。このファイルは、プロジェクト毎に1つだけ作成されます。 |
.res |
リソースファイルで、プロジェクトのアイコンデータなどが保管されます。 |
|
|

またプロジェクトを作成すると、下記のようなプロジェクト名に応じたファイルが作成されます。
ファイル名 |
説明 |
プロジェクト名.cbproj |
プロジェクトファイルで、プロジェクトの管理及びオプション設定などを保持しています。プロジェクトファイルは内部的に管理されるため、手動で修正しないでください。 |
プロジェクト名.cbproj.local |
プロジェクトのローカル設定ファイル |
プロジェクト名.cpp |
プロジェクトのメインプログラム(エントリポイント)に相当するファイル |
ユニット名.cpp |
フォームのソースファイル |
ユニット名.h |
フォームのヘッダーファイル |
ユニット名.dfm |
フォームのプロパティ設定ファイル |
|
|
ユニットとは、クラス定義や変数の宣言、そして実装部などを集めたプログラムを構成する部品のようなものと理解してください。一般的にC++Builderプロジェクトは複数のユニットで構成されます。
またユニット名は、デフォルトでは「UnitN」というようにナンバリングされた名前が付けられます。(Nには、数字が入ります。)
例えば、プロジェクトにフォームを1つ追加すると、(UnitN.cpp、UnitN.h、UnitN.dfm)の3つのファイルが1セットで作成され、フォームを持たないプログラムコードの場合は、(UnitN.cpp、UnitN.h)の2つのファイルが1セットで作成されます。

図2: ユニットについて

1.3 プロジェクトの保存
作成したプロジェクトを保存するには、メニューバーの[ファイル]-[全て保存]、もしくはツールバーの[全て保存(Shift+Ctrl+S)]を選択してください。
このとき、ファイル保存ダイアログボックスでユニットファイル(.cpp)やプロジェクトファイル(.cbproj)に対して[名前を付けて保存]を選択することで、デフォルト名から好きな名前に変更することができます。

図3: ファイルの保存ダイアログボックス

例えば、ここではユニット名を「TestUnit」、プロジェクト名を「TestProject」へそれぞれ変更します。
ファイル保存後、プロジェクトマネージャで確認すると、プロジェクト名やユニット名がそれぞれ変更されていることがわかります。

図4: プロジェクトマネージャでの確認

2.コンポーネントの配置
プロジェクトの作成が完了したら、次はコンポーネントをフォームへ配置を行います。フォームの画面の設計は、フォームデザイナを使用して行います。
本節では、以下の手順で実際にボタンコンポーネントをフォームへ配置し、簡単なフォームデザイナの使い方を見ていきましょう

2.1 ツールパレットからコンポーネントの選択
ツールパレットの[Standard]カテゴリ内にある「TButton」をマウスでクリックします。

図5: コンポーネントの選択

2.2 選択したコンポーネントをフォーム上へ移動
マウスをフォーム内へ移動し、コンポーネントを配置したい場所でマウスの左ボタンをクリックする
(但し、左ボタンを押した状態で離さない)

図6: 配置したい場所でマウスをクリック

2.3 コンポーネントの大きさを設定
左ボタンを押したままマウスを斜めに移動させる
(四角形が表示される)

図7: コンポーネントの大きさの設定

2.4 コンポーネントの配置完了
望みの大きさになったところでマウスの左ボタンを離す。

図8: 配置されたコンポーネント

ツールパレットでコンポーネントを選択後、フォーム上を単にクリックするだけでもコンポーネントの配置はできます。
またツールパレットで配置したいコンポーネントをダブルクリックすることでも配置できますが、これらの方法では、コンポーネントはデフォルトの大きさでフォーム上へ配置されるため、後からコンポーネントの位置やサイズの調整が必要です。
コンポーネントの位置の変更は、コンポーネントをマウスの左ボタンで選択し、そのままドラッグした状態で任意のフォーム内の位置へ移動できます。

図9: コンポーネントの位置の移動

そしてマウスの左ボタンを離すと、コンポーネントの位置が決定されます。

コンポーネントのサイズを変更するには、コンポーネントをマウスの左ボタンでクリックすると、コンポーネントの四隅と各辺に青い小さな円が表示されます。
これを「サイズ変更ハンドル」と呼び、コンポーネントが選択されていることを示します。このサイズ変更ハンドルをドラッグすることで、コンポーネントのサイズを変更することができます。

図10: コンポーネントのサイズの変更

四隅のサイズ変更ハンドルをドラッグすると「高さ」、「幅」が同時に変更できます。各辺のサイズ変更ハンドルをドラッグすると「高さ」、「幅」それぞれのサイズを変更できます。
尚、各コンポーネントの位置やサイズの変更は、次節で説明するオブジェクトインスペクタを使用し、プロパティを変更することで、同様に行えます。

3.プロパティの変更
配置したコンポーネントのプロパティの変更は、オブジェクトインスペクタで行います。
プロパティとは、クラス(コンポーネント)の属性のことで、例えばボタンの上に表示されている文字列や、コンポーネントの位置、大きさ、色など様々なものがあります。
本節では、以下の手順で実際にボタンコンポーネントのプロパティを変更し、簡単なオブジェクトインスペクタの使い方を見ていきましょう

3.1 オブジェクトインスペクタを表示する
フォーム上のボタンを選択し、オブジェクトインスペクタの表示項目を確認する

図11: TButtonコンポーネントのプロパティ表示

図11のようにオブジェクトインスペクタには、ボタンコンポーネントのプロパティが表示されています。
オブジェクトインスペクタの表示項目のうち、左側の列はプロパティ名、そして右側の列には現在の設定値をそれぞれ表示されています。
例えば、ここではCaptionプロパティに対する現在の設定値は”Button1”となります。=> 図11の(1) を参照
プロパティの設定値(右側の列)は、マウスで選択することができ、キーボードから直接入力、用意されたリストの一覧から選択、ダイアログボックスからの設定など、プロパティのタイプに合わせた様々な方法で編集することができます。

3.2 オブジェクトインスペクタでプロパティ値を変更する
TButtonのCaptionプロパティの値を変更します。
Captionプロパティの設定値を編集するには、右側にあるテキストボックスにマウスカーソルを合わせます。

図12: Captionプロパティの編集

マウスカーソルを合わせると、図12のように文字列が全選択され、色が反転して表示されます。この状態で、キーボード入力を行い、最後に[Enter]キーを押すと、既存の”Button1”文字列が新しく入力した文字列と置き換わります。ここでは、”メッセージを表示”という文字列を入力します。

図13: オブジェクトインペクタの変更とフォームの同期(その1)

Captionプロパティは、新しい文字列に置き換わり、即座にフォーム上のボタンの表示もオブジェクトインスペクタの変更に合わせてリアルタイムに同期します。
フォームデザイナとオブジェクトインスペクタで変更したデータは、互いに連動しているため、片方で修正した内容は必ず、もう片方へ反映されるようになっています。
例えば、フォーム上のボタンの位置をフォームデザイナによって移動させると、オブジェクトインスペクタ上のボタンのプロパティの表示も変更されます。

図14: オブジェクトインペクタの変更とフォームの同期(その2)

図14では、ボタンの位置を移動することによって、オブジェクトインスペクタ内のLeftとTopプロパティの表示がそれぞれ変更していることがわかります。
ここでは、ボタンコンポーネントを例として説明しましたが、他のコントロールも同様の方法で行えます。
このようにフォーム上に配置したコンポーネントは、フォームデザイナとオブジェクトインスペクタを使用して画面のレイアウトを設定していきます。

4.イベントハンドラの設定
イベントとは、ユーザーアクションやフォーカスの変更などのシステムの出来事と、その出来事に応答するコードとの間の関連づけのことです。この応答コードを「イベントハンドラ」と呼びます。
イベントは、コンポーネントに対してユーザーが行った操作によって引き起こされます。
例えば、マウスボタンをクリックするとOnClick(オンクリック)イベントが発生します。イベントにイベントハンドラを設定すると、イベント発生に対するプログラムの動作が定義できます。
コンポーネントのイベントハンドラを設定するには、オブジェクトインスペクタの[イベント]タブをクリックして、表示項目を切り替えます。

図15: イベントタブによる切り替えとイベントハンドラの表示

図15のようにイベントタブで表示を切り替えると、各コンポーネントのデフォルトで定義可能なイベントハンドラの一覧が表示されます。
本節では、以下の手順で実際にボタンコンポーネントに対する簡単なイベントハンドラを作成してみましょう

4.1 オブジェクトインスペクタでイベントハンドラを設定する
イベントハンドラを設定したいイベントの右側の欄をダブルクリックする

図16: イベントハンドラの設定

すると、オブジェクトインスペクタには”Button1Click”という名前でイベントハンドラが自動的に生成され、コードエディタが表示されます。

4.2 イベントハンドラの生成
エディタで生成されたコードを確認します。

図17: イベントハンドラの生成

コードエディタで確認すると、オブジェクトインスペクタで表示されているイベントハンドラと同じ名前のメソッドの雛形がフォームのプログラムコードに追加されます。
自動的に生成されるイベントハンドラ名は、コンポーネントの名前+イベント名(“On”を除く)の形で生成されます。
このイベントハンドラ名は、後から自由に変更することができます。
例えば、オブジェクトインスペクタでイベントハンドラ名を変更すると、対応するコードのイベントハンドラ(メソッド名)もそれに同期して自動的に変更されます。

4.3 イベントハンドラ(OnClick)内にコードを記述する
イベントとイベントハンドラの関連づけができたところで、イベントに応答するコードを記述します。
以下のようなコードをイベントハンドラ内に追加します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(“ボタンがクリックされた”); //この1行を追加する
}
ここでは、メッセージボックスで、”ボタンがクリックされた”と表示されるように定義しています。
またプログラムコード内のイベントハンドラ名は、C++Builderが管理している部分なので変更しないでください。
もし勝手に変更してしまうとコンパイル時にエラーになってしまいます。イベントハンドラ名の変更は、オブジェクトインスペクタで行ってください。
ここでは、マウスのクリック(OnClick)に関するイベントハンドラを作成しましたが、コンポーネントには他にも色々な種類のイベントが用意されています。
他のイベントについてもOnClickと同じ要領で、オブジェクトインスペクタによってイベントとイベントハンドラの関連づけが簡単に行えます。そして、自動生成されたイベントハンドラに任意のロジックを追加していくことができます。

5.プロジェクトのメイク
コンポーネントを配置し、イベントハンドラの記述が終わったら、アプリケーションを実行するためにプロジェクトのメイクを行います。

5.1 C++Builderによるプロジェクト構築の流れ
C++Builderでは、C++言語で書かれた(複数の)ソースファイルをコンパイルし、オブジェクトファイルを生成します。そして(複数の)オブジェクトファイル、フォームファイルやリソースファイル等とリンクを行い、最終的に実行形式ファイル(.EXE)を作成します。このようにプロジェクトのコンパイル、そしてリンクを行う一連の流れを「メイク」と呼びます。

図18: C++Builderプロジェクトのメイクの流れ

通常C/C++のソースファイルをメイクする場合には、別途メイクファイル(Makefile)を作成し、状況に応じてそれらを手動で編集する必要がありましたが、C++Builderではプロジェクトファイル(.cbproj)自身がメイクファイルも兼ねていますので、特に作成の必要も、手動による編集の必要もありません。C++Builderによって自動的に管理されます。
またC++Builderでは、プロジェクトのメイクを行う選択肢が主に2つあります。
1. プロジェクトのメイク
2. プロジェクトの再構築

両者の違いは、前者がコンパイル対象は修正が行われたファイルのみに限定されるのに対し、後者はプロジェクトに関連するソースファイルを全てコンパイルします。例えば、ソースファイル数が多いとき、「プロジェクトの再構築」を実行すると修正されていないファイルまで再コンパイルが行われるため、メイクが完了するまで余計に時間がかかります。プロジェクトの規模やソースコードの修正範囲などによって使い分けてください。
プロジェクトの[メイク]並びに[再構築]は、メニューバーの[プロジェクト]メニューから実行できます。

図19: [プロジェクト]メニュー

ここでは、”TestProject”というプロジェクト名が表示されていますが、実際には現在アクティブになっているプロジェクト名が表示されます。
またショートカットキーから直接実行しても同じ結果が得られます。例えば、[Shift]キー+[F9]キーを実行することで、プロジェクトの再構築が行われます。=> 図19の(1)を参照
さらに複数のプロジェクトをまとめてメイクした場合には、[プロジェクト]メニューから[すべてのプロジェクトをメイク]もしくは[すべてのプロジェクトをビルド(再構築)]を選択します。=> 図19の(2)を参照

5.2 C++Builderのメイクによって生成されるファイル
C++Builderのプロジェクトをメイクすることによって、自動生成されるファイルの種類は以下の通りです。
ファイルの拡張子 |
説明 |
.tds |
デバッグ情報ファイル |
.pch |
C++ のプリコンパイル済みヘッダーファイル |
.map |
メモリマップファイル |
.obj |
コンパイル済みのオブジェクトファイル |
.exe |
実行可能形式ファイル |
.dll |
ダイナミックリンクライブラリファイル (DLLプロジェクトを作成した場合のみ) |
.lib |
インポートライブラリファイル (DLLプロジェクトを作成した場合のみ) |
|
|

C++ のプリコンパイル済みヘッダーファイル(.pch)は、生成しておくことで必要なファイルだけがコンパイルされ、コンパイル時間を短縮させる働きがありますが、生成される.pchファイルのサイズは比較的大きく、そしてハードディスクに保持されます。そのため、このファイルをディスクに保持したくない場合には、プロジェクトオプションで設定を行って下さい。
メニューバーの[プロジェクト]-[オプション]から、[C++コンパイラ]-[プリコンパイル済みヘッダー]のメニューを選択します。

図20: プロジェクトオプションのPCH生成

そして[PCHの使用法]のオプションで[使用しない]、もしくは[使用するが生成しない]を選択してください。
またメモリマップファイル(.map)は、作成しておくことでアプリケーション例外が発生したとき、例外が発生したメモリアドレスとプログラムのどの部分に対応しているか原因を特定するための情報として役立つことがあります。このファイルはアプリケーションのリリース時においては、実行ファイルとセットで生成しておくと非常に有用です。ですが、デバッガを備えている開発環境では、その機能を利用するのでファイルを生成しておく必要が無い事があります。その場合には、同じくプロジェクトオプションで設定を行って下さい。
メニューバーの[プロジェクト]-[オプション]から、[C++リンカ]-[出力]のメニューを選択します。

図21: プロジェクトオプションのマップファイルの生成

そして[マップファイルの種類]のオプションで[マップを生成しない]を選択してください。マップファイルを生成しない以外にも、このオプションによって色々な種類が選択できます。
上述したようにアプリケーションのリリース時には、予め生成しておくとプログラムに何か問題が生じた時に、後で原因特定の手かがりとして利用できるため、このオプションを是非活用してください。

5.3 プロジェクトのビルドパス
C++Builderのプロジェクトでは、ビルドパスとしてヘッダーファイルが配置されたディレクトリである”インクルードパス”や、.objや.libのようなライブラリファイルが配置されたディレクトリである”ライブラリパス”を参照します。
ビルドパスの設定は、メニューパーの[プロジェクト]-[オプション]の[ディレクトリと条件定義]で行います。
C++Builderプロジェクトから外部のライブラリの参照が行う場合には、このオプションで適切なパスの追加が必要です。

図22: プロジェクトオプションのビルドパスの指定

少し前置きが長くなりましたが、最後に前節で作成したプロジェクトを実際にメイクしてみましょう。ショートカットキーである[Shift]+[F9]を押して下さい。
図23のようにエラー数がゼロで、終了ステータスが”再構築”と表示されればプロジェクトのメイクは完了です。

図23: プロジェクトのコンパイル完了

本章では、作成したプログラムコードにエラー箇所が含まれていないことを前提として話を進めていきます。
プログラムコードの修正やテストについては、次の章で説明します。

6.プログラムの実行
作成したプログラムの実行を行うには、メニューバーの[実行]-[実行]を選択、もしくはツールバーの[実行]ボタンをクリックします。(ショートカットキーの[F9]でも実行可能です)

図24: ツールバーの[実行]ボタン

以下の手順で実際にプログラムを実行してみましょう。

6.1 プログラムを実行する
実行ボタン(F9)を押します。プログラムが正常に実行されると、図25のようにフォームが表示されます。

図25: プログラムの実行画面

6.2 実行結果の確認
フォーム上の「メッセージを表示」と表示されたボタンを押し、プログラムの実行結果を確認してみましょう。

図26: プログラムの実行結果

ボタンを押すと、図26のようにメッセージボックスが表示されます。これは「イベントハンドラの設定」の4.3「イベントハンドラ(OnClick)内にコードを記述する」で追加したコードであり、実行結果としてメッセージボックスで”ボタンがクリックされた”と表示されます。

6.3 プログラムを終了する
実行中のプログラムを終了するには、メニューバーの[実行]-[プログラムの終了]で行えます。
また図27のように表示されているメインフォームの右上隅の閉じるボタン(Xアイコン)をクリックしてもプログラムを終了できます。

図27: プログラムの終了

以上のようにC++Builderでは、ビジュアルプログラミングを活用することによって、煩雑なコーディング作業を極力抑え、すぐに動作するWindowsアプリケーションの開発が簡単に行えます。
また本章では特に取り上げませんでしたが、グラフィカルユーザーインタフェースを持つWindowsアプリケーションの他にコンソールベースのアプリケーション開発も行えます。
詳しくはこちらをご覧下さい。

あとがき
第四回は 、プログラミング手順の前編として「プロジェクトの作成」から「プログラムの実行」までの基本的な手順を通してC++Builderの開発スタイルを理解していただくことを目的として説明しました。
第五回は、「プログラミング手順(後編)」です。前編で取り上げなかった作成したプログラムの「コンパイルエラーの解決」や「デバッグ」といったテスト手順を中心に、C++Builderが持つデバッガ機能を通して説明していく予定です。
Connect with Us