2009-07-21 3 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

계획대로 작동하지 않는 코드입니다 : 회색 부분 아니오 taskpane의 오른쪽, 그리고 자식 창은 제목 표시 줄 및 테두리를 표시해야

좌표를 직접 계산하는 것 외에도이 작업을 수행 할 수있는 방법이 있습니까 (예 : 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

관련 문제