|
Delphi2010 グリッドパネル(GridPanel) 2010/09/24 |
前回は[Additional]内の「FlowPanel」(フローパネル)について見ましたので、今回は同じく[Additional]内の「GridPanel」(グリッドパネル)について見てみます。グリッドパネルは Delphi6 にはありません。
前述の従来のパネル(Panel)は、パネルを配置し、その上に様々なコントロールを配置して自由にレイアウトをする事が出来ましたが、このグリッドパネルは、パネルを配置し、その上に様々なコントロールを配置する、というところまでは同じなのですが、コントロールの位置を自由に指定する事は出来ません。行数・列数を指定してパネル上を分割し、それぞれの区域にコントロールを順番に配置していきます。
フローパネルと同じく、位置指定の自由度はありませんが、コントロール同士がぴったりくっつくような感じではなく、行・列指定によるグリッド位置で整列させることが出来ます。
これはフローパネルのように、フォントの大きさ等の設定を吸収してくれる、というよりは、コントロールを理路整然と綺麗に並べたい、というほうを優先しているという感じはします。
取り合えず配置してみます。1つ目ですので Nameプロパティは「GridPanel1」となります。
グリッドパネルの文字は、Captionプロパティで指定する事が出来ます。この文字の表示位置は、フローパネル同様、Alignmentプロパティで水平位置(「taCenter」(中央)・「taLeftJustify」(左)・「taRightJustify」(右))を、VerticalAlignmentプロパティで垂直位置(「taVerticalCenter」(中央)・「taAlignTop」(上)・「taAlignBottom」(下))を指定する事が出来ます。但し、パネルとしての使用は通常、上にコントロールを配置してレイアウトする事なので、Captionプロパティの内容は空状態にして文字を表示させないようにするのが1つのパターンだと思われます。
さて、それでは、グリッドパネルの上にコントロールを配置してみます。
グリッドパネルを選択した状態で、[Standard]内のラベル、エディット、ラベル、エディット、という順番で配置します。すると下図のようになります。
コントロールを配置したあと、それぞれを移動させようとしてみて下さい。動かそうとしても元の位置に戻ってしまうのが分かります。それでは、<オブジェクトインスペクタ>の内容を見ていきます。
上記の状態で更にコントロールを配置してみます。すると下図のように下方向=行方向へ追加されようとします。これは、ExpandStyleプロパティが「emAddRows」(デフォルト状態)になっている場合です。行追加モードとなります。
ExpandStyleプロパティを「emAddColumns」にすると列追加モードとなり、この場合は下図のように右方向へ=列方向へ追加されようとします。
また、ExpandStyleプロパティを「emFixedSize」にすると固定サイズモードとなり、この場合は追加できなくなり、追加しようとすると以下のようなエラーメッセージが表示されます。
これによりグリッド配置設定が思惑と異なる場合もありますので、通常はこのようなことをせず、自分で行と列を指定しておいて、その分だけコントロールを配置する、という方が良いように思います。
上記のラベル2つエディット2つ状態で、保存・コンパイル(再構築)・実行を行うと、下図のようになります。グリッドの線は表示されません。以外とすっきりした感じに見えるような気はします。
グリッドの列を指定するには、ColumnCollectionプロパティを使います。<オブジェクトインスペクタ>でこの欄を指定すると右端に[…]ボタンが表示されますのでそれをクリックします。すると恒例のように編集画面が表示されます。
↓
この編集画面の項目をマウスでクリックして指定すると、<オブジェクトインスペクタ>にその内容が表示され、編集することが出来るようになります。
この SizeStyleプロパティで、グリッドの列の大きさ指定方法を、そして Valueプロパティでその値を、決める事が出来ます。「ssPercent」にすると、グリッドパネル全体に対する比率をパーセントで指定する事が出来ます(※但し、なぜか入力した数値はキャンセルされて勝手に違う数値になってしまいますので全く使えません!)。「ssAbsolute」=「絶対値」にすると、ピクセル値での指定を行う事が出来ます。但しこの場合、他の列の指定と関連してしまって無効化される場合もあるようなので他の列を自動にしてから再度指定しなおすとうまくいく場合もあるようです。また、大きめに指定した後に再度指定しなおすとうまくいく場合もあるようです。「ssAuto」=「自動」にすると、自動的に決定される、とありますが、おそらくは他の列の指定をした分の残り分であるとか、そういう感じではなかろうかと思われます。全て「自動」にするとコントロールの大きさに合わせてうまい具合に調整してくれるのだろうか?と想像してしまいますが、どうもそれは少し甘いようです。また、このグリッドパネルが各コントロールの大きさを制限するようなので、各コントロールの Widthプロパティ値が触れない、というような状態にもなるようです。
こうなってくると、はっきり言えば、グリッドパネルは、ちゃんと使えれば有効で便利なコンポーネントであると思われますが、かなり使いにくいコンポーネントでもあると言えそうです。
編集画面左上のアイコンをクリックすると、列を追加する事が出来ます。隣のアイコンでは削除する事が出来ます。
グリッドの行を指定するには、RowCollectionプロパティを使います。<オブジェクトインスペクタ>でこの欄を指定すると右端に[…]ボタンが表示されますのでそれをクリックします。すると上記と同じく編集画面が表示されます。その内容についても上記と同じですので説明は省略します。
基本的には、グリッドパネルを配置し、行と列の数とそれぞれの大きさを「ssAbsolute」=「絶対値」で指定してしまってから、コンポーネントを配置して、レイアウトを確定するというイメージでしょうか?
各コンポーネントの大きさは制限されて変更できないようですから、グリッドパネルの方で調整する、というのがパターン、というよりは、各コントロールで勝手な大きさを使わせたくない、各コントロールの大きさを統一させたい、という方が主体なのかもしれません。
そのほか、<オブジェクトインスペクタ>をざっと見た限りでは、特に気になるようなプロパティやイベントは無さそうです。
という訳でこのコンポーネントもフローパネル同様、自由にレイアウトをしたいという場合には使えませんが、要は使いよう、って感じもしますので、使う事によって、有効・便利な方法も分かっていくかもしれません。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/09/23
2010/09/24
▼2010/09/25
シェアウェア
Script!World
データベース
|