†Sibylのお部屋†

【Sibyl】パネルの排他的な配置 −TPanelとTToolbar−

作成開始日 2022.01.19
最終更新日 2022.01.19

【結論】排他的隣接配置にはTToolbarを上手に使う

フォーム上のパーツ(コントロール)をグループ化して扱う際にはパネルを使うと便利。しかし、パネルは排他的な配置ができない。例えば、フォームの上にパネルを3つ配置して、「上・中・下」とか、「左・中・右」のように領域を自動的に隣接分割してくれると有り難いのだが、これができない。パネルだけではなく、他のほとんどのコントロールでも同様で、自動的に排他配置/隣接配置をする設定はないようだ。

コントロールの配置はAlignプロパティで設定する。この配置のプロパティにはalTop、alLeftなどのように、フォームの大きさに連動して自動的にサイズが変更されるものがあるが、これらはフォームとの相対的な位置関係を調整するもので、隣接するコントロールとの位置関係は顧慮されない。

alFrameを指定すればコントロール間の相対的位置関係を保持はするが、自動的に隣接させるようにはできない。上述のように領域を隣接3分割したければ、初期設定段階で位置プロパティを手作業で設定する必要がある。これでは少し面倒だ。

しかし、全てのコントロールが排他的隣接配置が不可能なのかと言うと、そうでもない。たとえば、メインメニューはフォームの上部に居座って、他のコントロールと干渉しない。他のコントロールにalClient指定をして、クライアント領域いっぱに表示しても、メインメニューだけは隠れない。メインメニューの大きさ分だけクライアント領域が減少するのである。ただ、メインメニューは用途が限定的で、これを汎用的なパネルのように使用することはできない。

しかし、ツールバー(TToolbar)ならば汎用的に使用できる。ツールバーもメインメニューと同じように、フォームの特定の端(天地左右のいずれか)に張り付いて、他コントロールの干渉を受けない。ただ、ツールバーでは細長くて利用範囲が限られる−−と思っていたが、実は高さ変更は自由で、パネルとほぼ同じように使用できる。ただ、配置が天地左右のいずれかに貼り付くという制限があるだけだ。

ツールバーを使ってフォームを三分割しようと思ったら、まず、フォームの上部と下部に1つずつツールバーを配置する。この段階で必要に応じて各ツールバーの高さを調整する。さらに真ん中にパネルを配置して、AlignプロパティをalClientとする。これだけでフォームが3領域に隣接分割される。なお、真ん中に置くコントロールはListBox等でも可。

こうすれば、フォームをリサイズしても各コントロールの相対的な位置関係は自動的に維持される。天地のツールバーの高さは不変で、真ん中のパネルの高さが自動調節される。OnResizeイベントハンドラでちょこちょこ調整しなくても大丈夫。ツールバーは制限も多いが、こうした使い方にはたいへん便利である。


【Sibylのお部屋目次】 【ホーム】