ソフトウエア開発を支える開発環境の現在
コンテナコンポーネント
ここでは、コンポーネントの配置を行います。コンポーネントの大きさは、Left、Top、Width、Heightといったプロパティで決まっていますが、これはコンポーネントを置く場所を提供するコンポーネントによって変わります。この場合は、Formです。
FormやPanelは、「コンテナ」と呼ばれる、その上に別のコンポーネントを配置できる特別なコンポーネントです。コンテナは、コンポーネントの配置の仕方を規定しています。通常はXY座標ですが、順番に並べるように配置するFlowPanelやグリッド状に配置するGridPanelなどもあります。
図6:Grid Panelによるコンポーネントの配置(クリックで拡大) |
また、コンテナ上のコンポーネントのAlignプロパティを用いれば、コンテナの上下左右、あるいは全体に位置するように大きさと場所を自動調整することもできます。
コンポーネントは、TObject、TComponentなどを継承して作られており、通常のオブジェクト指向プログラミングと同様、性格の異なるコンポーネントであっても、共通項に対しては、同じプロパティやメソッドを用いて共通の操作が可能です。
コンポーネントの外観、動作を変える
配置したコンポーネントはそのままでも動作します。ボタンは押せばへこみますし、チェックボックスはクリックすればチェックマークが表示されます。しかし、標準とは違う表示にしたり、独自の動作を定義したりしたい場合があるでしょう。
そのような場合には、まずプロパティを確認します。プロパティには、Captionのように値を設定して表示を変更したり、オプションを選択して外観や動作を変更したりするものがあります。
プロパティでは設定できない独自動作を定義するには、イベントを用います。イベントの種類はコンポーネントによって異なりますが、マウスをクリックした(OnClick、OnMouseDown、OnMouseUpなど)とか、キーボードをタイプした(OnKeyPress、OnKeyDown、OnKeyUpなど)といった入力デバイス系のイベントや、ウィンドウの表示関係のイベント(OnShow、OnClose、OnPaint、OnResizeなど)、コンポーネントの生成、破棄に関するもの(OnCreate、OnDestroyなど)があります。
Delphiのプログラミング上達には、これらのプロパティ、イベントをよく知ることがなにより大事です。動作を調べるには、コンポーネントをフォームに配置して、オブジェクトインスペクタでちょっと設定を変えてみるだけで簡単に行えます。
プログラムの全体像をすっきり見通せるようにする
このようにDelphiでは、簡単な操作でプログラムを構成する要素をカスタマイズできます。これは大変便利である一方、少しずつ改良を重ねていくうちに、まとまりのないものになっていったり、複雑化してしまったりする恐れもあります。
Delphiはあくまでもツールです。ツールをどのように使いこなすかは、結局プログラマの腕次第なのです。ツールに振り回されて、見通しの悪いプログラムにならないようにするには、アプリケーション全体の設計をしっかり考えましょう。改良を重ねていくうちにごちゃごちゃしてきたら、思い切って構造を変更してみることも大事です。
例えば、Delphiには、リファクタリングと呼ばれる機能があり、イベントハンドラの中にごちゃごちゃと記述してきたコードをメソッドとして切り出したり、統一性のない変数名を一気に修正したりするような操作ができます。
図7:リファクタリング(クリックで拡大) |
Delphiの特長は、最大のコンポーネントです。コンポーネント化のメリットは、ユーザーインターフェースだけではありません。データの扱いについても、コンポーネントによるモジュール化、汎用化を意識すれば、変更に強いアプリケーションを作成できます。アプリケーションで、データは重要な役割を果たしますから、この点については、次回以降じっくり掘り下げてみたいと思います。