Alignを変更するには?

解決


ahsan  2008-10-15 19:37:19  No: 32207

MDI親フォームのクライアント領域に
区画を設けたくて、Panelを2個配置しています。
Panelを配置する場合、仮にPanel1のAlign=alRight
Panle2のAlign=alBottomにすると
      □□
      □□
      □□
■■■■■
■■■■■
になります(□=Panel1,■=Panel2)
こうではなくて、
      □□
      □□
      □□
■■■□□
■■■□□
こうしたいのですが、
このような場合、Alignをどのように
設定すればよいのでしょうか?


うんと  2008-10-15 19:42:13  No: 32208

MDI親フォームのクライアント領域には、なにもコンポを置いてはいけません。
MDI子フォームがすべての領域を使うのがウィンドウズの作法です。

それはそれとして、alRight  alClient  alBottom の三つのパネルで簡単に
その配置は実現できますね。


ahsan  2008-10-15 20:15:15  No: 32209

うんとさん、早速ありがとうございます。
MDI子フォームはこの区画(Panel)を覆わず、
思惑どおり動いたので良かったと思ったのですが、
無作法でもいいので、作成した場合、
何か問題が出てしまうのでしょうか?
逆に、このような場合はどうすればよいのでしょうか?
Alignの変更については、Panel1をalClientにし、Panel1に
Panel3を置いて、Panl3をalRightにすれば実現できます。
そういうことですね?


たぶん  2008-10-15 21:11:08  No: 32210

>       □□
>       □□
>       □□
> ■■■□□
> ■■■□□
TStatusBarとかTToolBarあたりの上下に配置するようなコンポーネントが
正しく配置されるように、上下を優先する仕様で、できないんじゃないかな?
で、3枚のパネルで実現しても、MDI子が見えなくなるので、使い物にならない・・・と。

ちょっと考え方を変えて、MDI親には右パネル。MDI子に、Bottomのパネルを
配置したら、MDI子の最大化で、思った通りの配置になりそうだけど、
それではダメだよね?


ahsan  2008-10-15 22:21:20  No: 32211

たぶんさん、ありがとうございます。
>TStatusBarとかTToolBarあたりの上下に配置するようなコンポーネントが
>正しく配置されるように、上下を優先する仕様で、できないんじゃないかな?
なるほど、そういう理由かもですか。
>で、3枚のパネルで実現しても、MDI子が見えなくなるので、使い物にならない・・・と。
たしかに。
>ちょっと考え方を変えて、MDI親には右パネル。MDI子に、Bottomのパネルを
>配置したら、MDI子の最大化で、思った通りの配置になりそうだけど、
>それではダメだよね?
たしかに、見た目上そうなるのですが、子に配置するのはちょっと・・・
MDI親右パネルのみで何とか区画考えてみます。


ofZ  2008-10-15 23:15:57  No: 32212

解決済みですが、以下でどうでしょう。
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;


ahsan  2008-10-16 01:26:31  No: 32213

ofZさん、ありがとうございます。
別途コードを書かないとダメだったのですね。
色々コントロール含めコンポーネント置いていますので
行ってみます。ありがとうございました。


ofZ  2008-11-14 18:06:34  No: 32214

もう一ヶ月も前の話だけど、

1)Alignを設定せず、希望のレイアウトでパネルを配置する(隙間なくね)
2)下パネルのAnchorsは、akTop以外True、左パネルAnchorsは、akLeft以外True

これだけで動くようだ。
Anchorsに動作を任せておけばいいので、設計時も正しく見えるし、楽だろう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加