MDI親フォームのクライアント領域に
区画を設けたくて、Panelを2個配置しています。
Panelを配置する場合、仮にPanel1のAlign=alRight
Panle2のAlign=alBottomにすると
□□
□□
□□
■■■■■
■■■■■
になります(□=Panel1,■=Panel2)
こうではなくて、
□□
□□
□□
■■■□□
■■■□□
こうしたいのですが、
このような場合、Alignをどのように
設定すればよいのでしょうか?
MDI親フォームのクライアント領域には、なにもコンポを置いてはいけません。
MDI子フォームがすべての領域を使うのがウィンドウズの作法です。
それはそれとして、alRight alClient alBottom の三つのパネルで簡単に
その配置は実現できますね。
うんとさん、早速ありがとうございます。
MDI子フォームはこの区画(Panel)を覆わず、
思惑どおり動いたので良かったと思ったのですが、
無作法でもいいので、作成した場合、
何か問題が出てしまうのでしょうか?
逆に、このような場合はどうすればよいのでしょうか?
Alignの変更については、Panel1をalClientにし、Panel1に
Panel3を置いて、Panl3をalRightにすれば実現できます。
そういうことですね?
> □□
> □□
> □□
> ■■■□□
> ■■■□□
TStatusBarとかTToolBarあたりの上下に配置するようなコンポーネントが
正しく配置されるように、上下を優先する仕様で、できないんじゃないかな?
で、3枚のパネルで実現しても、MDI子が見えなくなるので、使い物にならない・・・と。
ちょっと考え方を変えて、MDI親には右パネル。MDI子に、Bottomのパネルを
配置したら、MDI子の最大化で、思った通りの配置になりそうだけど、
それではダメだよね?
たぶんさん、ありがとうございます。
>TStatusBarとかTToolBarあたりの上下に配置するようなコンポーネントが
>正しく配置されるように、上下を優先する仕様で、できないんじゃないかな?
なるほど、そういう理由かもですか。
>で、3枚のパネルで実現しても、MDI子が見えなくなるので、使い物にならない・・・と。
たしかに。
>ちょっと考え方を変えて、MDI親には右パネル。MDI子に、Bottomのパネルを
>配置したら、MDI子の最大化で、思った通りの配置になりそうだけど、
>それではダメだよね?
たしかに、見た目上そうなるのですが、子に配置するのはちょっと・・・
MDI親右パネルのみで何とか区画考えてみます。
解決済みですが、以下でどうでしょう。
Panel1とPanel2にコンポーネントが多数載っている場合、
どんな動きになるかまでは検証していません。
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
protected
procedure AlignControls(AControl: TControl; var Rect: TRect); override;
end;
procedure TForm1.AlignControls(AControl: TControl; var Rect: TRect);
begin
inherited AlignControls(AControl, Rect);
Panel2.SetBounds(ClientWidth-Panel2.Width, 0,
Panel2.Width, ClientHeight);
Panel1.SetBounds(0, ClientHeight - Panel1.Height,
ClientWidth-Panel2.Width, Panel1.Height);
end;
ofZさん、ありがとうございます。
別途コードを書かないとダメだったのですね。
色々コントロール含めコンポーネント置いていますので
行ってみます。ありがとうございました。
もう一ヶ月も前の話だけど、
1)Alignを設定せず、希望のレイアウトでパネルを配置する(隙間なくね)
2)下パネルのAnchorsは、akTop以外True、左パネルAnchorsは、akLeft以外True
これだけで動くようだ。
Anchorsに動作を任せておけばいいので、設計時も正しく見えるし、楽だろう。
ツイート | ![]() |