3ペインウィンドウのMDIアプリケーションを作成しています。
3ペインは、左、右上、右下の3つに分け、自前のレイアウトコンポーネントで配置しています。
ここで、右下のペインにMDI子フォームを最大化状態で表示したいのですが、うまくいきません。
# MDI子フォームは、元の大きさには戻さず、切り替えはタブで行います
試したのは、
・ClientWidth,ClientHeightを変更。
当たり前ですが、ウィンドウサイズが変わりました
・子フォームをMaximizedにしてすぐWidth,Heightを指定
妙な動きをしています。タイトルバーが出てしまいました
の2つ。
FrameやPanelに置き換えようにも、DLLから作成したFrameやPanelではエラーが起きてこれもうまく動きません。
# このバグをとれればよいのですが、根が深そうです
できるだけ簡単に行えればよいのですが、何か方法はありませんか。
Delphi7Pro
Windows2000/XP
タイトルバーを表示したくないということであれば、
子フォームのWindowStateをwsMaximizedにし、
同じくBorderStyleをbsNoneにする
と言う方法ではだめですか?
#こういう事では無い?
。。。読み飛ばして頂いて結構です
パネルが配置してあるので、MDI子フォームを単純に最大化するだけではパネルの下に隠れてしまいます。
# 上に書いてあるように、3ペインを実現するためAlignは使えません
でも、BorderStyleをbsNoneにするのは盲点でした。
ちょっと試してみます。
レイアウトコンポーネントの詳細がわからないので正しくないかも知れませんが。
Form1に
・Panel1(Align=alLeft)
・Panel2(Align=alClient)
・Panel3(Align=alTop)->Panel2に配置
・Panel4(Align=alClient)->Panel2に配置
Form2(自動作成の対象外)
・Align=clClient
・WindowState=wsNomal
・BorderStyle=bsNone
・Visible=False
Panel1にButton1を配置した状態で
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.Parent := Panel4;
Form2.WindowState := wsMaximized;
Form2.Visible := True;
end;
とします。
#色々試した結果、表示も乱れず一番いい状態で表示されました。
Form1を最大化したときもちゃんとサイズが大きくなります。
Win2K + Del6
OKでした!
ただ、
Parent := CenterPanel;
ではだめで、
ParentWindow := CenterPanel.Handle;
ならOKでした。
ありがとうございます。
それぞれのpaneのAlignはalNoneにしています。
レイアウトコンポーネントとは名ばかりで、
property TopPane: TWinControl;
property LeftPane: TWinControl;
property CenterPane: TWinControl;
property RightPane: TWinControl;
property BottomPane: TWinControl;
property Parent: TWinControl;
property Rule: TBorderRule;
これらを設定して、packメソッドを呼ぶと並べ替えてくれるというだけです。
packの中では、地味にParent.ClientWidth, ClientHeightと、各Pane.Left,Top,Width,Heightを計算しています。
通常のAlignでは、
AAA
BCD
EEE
(同じ文字が1つのペイン)
と並んでしまい、3ペインで
XY
XZ
(同じ文字が1つのペイン)
というような、左側が上から下まで通っているものにしたいのに、
XY
ZZ
となり(下が、左から右まで通っている)になってしまうので自作しました。
あとは、境界のドラッグ部分ができれば完成です。
ツイート | ![]() |