windowstate를 건드리지 않고 폼 사이즈를 계산하시려는 거군요
유사한 소스는 자료실에 예전에 올린 것이 있어요. 이걸 사용하셔도 child폼이 하나이면 화면에 꽉차는 효과가 있습니다
SUBJECT MDI Form에서 Child폼 정리하기(Tile확장)...
단, 계산중 예전에는 적당히 5정도를 뺏는데 MainForm.BorderWidth - GetSystemMetrics(SM_CXFRAME) 계산을 추가 했습니다.
//메인폼의 모든 컴포를 검색해 Visible/Align로 가로 세로 여백을 구해 오는 함수
function GetMDIWorkArea(MainForm: TForm): TRect;
function GetTop: Integer;
var
i, j: Integer;
begin
with MainForm do begin
j := 0;
for i := 0 to ControlCount - 1 do
if Controls[i].Visible and (Controls[i].Align = alTop) and (Controls[i].Top + Controls[i].Height > j) then
j := Controls[i].Top + Controls[i].Height;
end;
Result := j;
end;
function GetBottom: Integer;
var
i, j: Integer;
begin
with MainForm do begin
j := ClientHeight;
for i := 0 to ControlCount - 1 do
if Controls[i].Visible and (Controls[i].Align = alBottom) and (Controls[i].Top < j) then
j := Controls[i].Top;
end;
Result := j;
end;
function GetLeft: Integer;
var
i, j: Integer;
begin
with MainForm do begin
j := 0;
for i := 0 to ControlCount - 1 do
if Controls[i].Visible and (Controls[i].Align = alLeft) and (Controls[i].Left + Controls[i].Width > j) then
j := Controls[i].Left + Controls[i].Width;
end;
Result := j;
end;
function GetRight: Integer;
var
i, j: Integer;
begin
with MainForm do begin
j := ClientWidth;
for i := 0 to ControlCount - 1 do
if Controls[i].Visible and (Controls[i].Align = alRight) and (Controls[i].Left < j) then
j := Controls[i].Left;
end;
Result := j;
end;
begin
if MainForm <> nil then
Result := Rect(GetLeft, GetTop, GetRight, GetBottom);
end;
//Form2가 child폼일때 Create시 계산합니다
procedure TForm2.FormCreate(Sender: TObject);
var
R: TRect;
W, H: Integer;
begin
Form2.WindowState := wsNormal;
R := GetMDIWorkArea(Form1);
W := R.Right - R.Left - Form1.BorderWidth - GetSystemMetrics(SM_CXFRAME); //예전 것과 변경부분
H := R.Bottom - R.Top - Form1.BorderWidth - GetSystemMetrics(SM_CYFRAME); //예전 것과 변경부분
if W < 0 then W := 0;
if H < 0 then H := 0;
Form2.SetBounds(0, 0, W, H);
end;
제가 할려고하는 것은 mdiform에서 mdichild폼을 호출해서 mdichild폼을 나타낼때 mdiform크기에 맞게 mdichild폼이 꽉차게 폼을 표현하고자 합니다.. 즉 mdiform에는 메뉴와 상태바가 있는데 mdichild폼이 메뉴와 상태바를 제외한 공간크...