CollapsePanel の拡張 - Delphi 2005

CollapsePanelは結構便利に使えるようですが、下図のように実際においてみると。ちょっと気がつくことがあります。それは、どうもあまり見栄えが良くないことです。


ちなみに、TCollapsePanelと似たような動きをする、Macromediaのパネル(下図)を見てみても、TCollapsePanelより見栄えがいいです。

 DelphiのIDE自体もCollapsePanelのような挙動をする部分はありますが、ちゃっかり、グラデーションしています。

 今回は、CollapsePanelを修正しつつ、リファクタリングや、コンポーネント周りを見ていきたいと思います。最終結果は下のようなCollapsePanelが出来上がります。 見栄え的にはちょっとレベルアップします。

 先にコードのつくりかたを紹介しておきます。最終コードはセクションの最後にあります。まず、TCollapsePanelのコードを作業ディレクトリにコピーします。次に、TCollapsePanelの名前を変更します。この変更はリファクタリング機能を使います。

 リファクタリング機能でクラス名を変更すると、関係場所が一度に変更できるので、このような局面ではても役に立ちます。TCollapsePanel以外にもクラスや、構造体があるので、名前を変更していきます。

 続いて、描画関数を作ります。描画部分は、TDockTabSetと同じものがよさそうだなと思いましたので、そのルーチンを抜き出してきます。本当ならば専属デザイナーのような方にキャプションバーをデザインしてもらうとオリジナリティーが出たりしますが、今回は、すでにあるものを使ってしまいます。描画部分は CaptionedDockTreeユニットの TDockCaptionDrawer.DrawDockCaptionメソッドになっていますので、このメソッドをコピーして、新しく作ったユニットにコピーしました。次に、TDockCaptionDrawer.DrawDockCaptionメソッド内の関数内関数をばらして、すべてコメントアウトしてしました。その他使わない部分もすべてコメントアウトしてしまいました。

 あとは、TCollapsePanelのHeaderの描画部分をDrawDockCaptionの描画にしてやれば、Headerの見栄えが変更できます。また、パネルの部分は、GradientFillCanvasを使ってグラデーションをかけることで、見栄えを少しよくしてみました。ここまでのコードが下図に載せてあるコードになります。この下のコードの状態はまだ暫定の状態であり、コンポーネントとして完成させてまとめる場合は、描画カラーをプロパティで設定できるようにしたり、不必要なプロパティーを取り除く作業をする必要があります。

 作業中に気づいた点としては、リファクタリング機能で関数を抽出するとき、クラスの外へ抜き出したいときに、できないのが不便でした。また構造体がvarつきで抽出しなかったケースもありました。

 コンポーネントのインストールは、Delphi2005からは、パッケージを先に作成しておかないとインストールできないようになりました。最初に、新規作成メニューのパッケージを選択します。パッケージが新規作成できたら、プロジェクトマネージャーで右クリックしポップアップメニューの追加を選択するか、ツールバーの追加ボタンをクリックします。

 ユニットの追加ダイアログが出てきますので、ユニットファイル名を指定します。

ユニット追加ができましたら、右クリックでポップアップメニューを表示させ、「インストール」をクリックします。これでカスタムコンポーネントをインストールをすることができます。コンポーネントのインストール手順はDelphi7までとはだいぶ違うので注意が必要かもしれません。

 メインユニット

 描画ユニット



著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2005-01-01
iPentec all rights reserverd.