【DO!BOOK・ページリンク】
2008_migaro_techreport_001   121 / 136

BOOKをみる

10秒後にBOOKのページに移動します


119 8.TreeViewでの 動的メニュー制御 メニュー内容を、DB 上のファイ ルで動的に構成できないでしょう か? メニューは一般的にボタンを配 置した画面が多いが、動的にメ ニューを作成するのであれば、TreeView を使用する。エクスプローラーのような形 で、見やすいメニューアイテムを動的に制 御することができる。【図7】 ・TreeView コンポーネント  TreeView コンポーネントでは、アイテ ム(ノード)に親子関係を持たせることが できる。コードの体系によって親子関係を ブレイクするロジックにしておけば、デー タのコードによって、動的なアイテム(ノー ド)を構築することができる。  この仕組みで、メニューを管理するファ イルからメニューアイテムを読み込み、 TreeView へ動的にアイテム(ノード)を 追加していく関数例を示す。【ソース6】  アイテム(ノード)を追加する際には、 AddChildObject というメソッドを使用し て、パラメータに親となるアイテム(ノー ド)、表示名、付加情報(ここでは起動プ ログラム名)を受け渡す。最上位のアイテ ム(ノード)の場合、親は存在しないので、 nil をパラメータに設定する。 ・アイコンと階層  また、TreeView は、Images プロパティ でTImageList を設定して、表示アイコン を持つことができる。事前にアイコンを登 録したり、実際にメニューから起動される 実行ファイルでExtractIcon を使用して、 動的にアイコンを取得・設定することもで きる。  TreeView コンポーネントは、階層別に 折りたたみができるので、視覚的にわかり やすい画面を作ることができる。  例えば、勘定科目のような照会画面など に活用することで、使いやすいユーザーイ ンターフェースを提供することができるだ ろう。【図8】 ソース6 メニューアイテム動的作成関数例 // 〜〜 type PTVRec = ^TTVRec; TTVRec = record EXENM: string; end; // 〜〜 // メニューアイテム動的作成関数 procedure TfrmQ3.LoadMenu; var TopNode : TTreeNode; // 追加されたトップノード ChdNode1: TTreeNode; // 追加された子ノード ChdNode2: TTreeNode; // 追加された孫ノード TVRecPtr: PTVRec; // ノード情報 BrkCd1 : string; // 大区分 BrkCd2 : string; // 中区分 Title : string; // タイトル MenuCD : string; // メニューコード begin // 既存のノードを削除 TreeView1.Items.Clear; // 初期設定 TopNode := nil; BrkCd1 := ''; BrkCd2 := ''; Q. A. 図7 実装イメージ 図8 勘定科目一覧の例