2009-07-21 4 views
0

私はクライアントエリア全体を使用するMDI子ウィンドウを表示したいと思います。灰色の部分がないタスクペインの右側に、子ウィンドウを持っているが、そのタイトルバーと境界を示しています子フォームはクライアントエリア全体を使用しますか?

procedure TForm1.RzGroup1Items0Click(Sender: TObject); 
var 
    Form2 : TForm2; 
begin 
    Form2 := TForm2.Create(Application); 

    //BAD : doesn't start at 0,0, and triggers horizontal scrollbar 
    Form2.Align := alClient; 

    //BAD : doesn't show titlebar and borders 
    Form2.WindowState := wsMaximized; 

    //BAD : window exceeds width -> horizontal scrollbar shown 
    Form2.top  := 0; 
    Form2.Left := 0; 
    Form2.Width := Self.ClientWidth; 
    Form2.Height := Self.ClientHeight; 
end; 

http://img149.imageshack.us/img149/3204/delphimdichildwindowwit.jpg

ここでは計画どおりに動作しないコードは、です

これを行う方法はありますか?自分自身で座標を計算する方法(例:ClientWidthなど)以外にもありますか?

ありがとうございます。

+0

リンク内の子フォームは最大化されず、親mdiformのクライアントrect全体にのみサイズが変更されます。 –

答えて

2

次のコードは、MDIクライアント領域の四角形を示しています。 MDIとの戦闘は難しいことに注意してください。

Form2.BoundsRect := GetMDIClientAreaBoundsRect(Form1); 

function GetMDIClientAreaBoundsRect(MDIForm: TForm): TRect; 
begin 
    if MDIForm.FormStyle = fsMDIForm then begin 
    if not Windows.GetClientRect(MDIForm.ClientHandle, Result) then 
     RaiseLastOSError; 
    end 
    else 
    raise Exception.Create('MDIForm is not an MDI form'); 
end; 
1

最も簡単な方法は、TILEコマンドです。

var 
    wFrm : TChildMDI; 
begin 
    wFrm := TChildMDI.create(self); 
    wFrm.Show; 
    Tile; 
end; 

TILEはTFormのメソッドであり、MDI子ウィンドウが1つしかない場合は、必要なものだけを実行します。 1より大きい場合は、すべての可視の子ウィンドウが同様のレイアウトに収まるように配置されます。 Ryan。

+0

助けてくれてありがとう! – Gulbahar

関連する問題