Form1调用Form2,如何使Form2占满Form1的Client(不覆盖工具条和状态条)(50分)

  • 主题发起人 果然信人
  • 开始时间

果然信人

Unregistered / Unconfirmed
GUEST, unregistred user!
程序如下:
Form2:=TForm2.Create(self);
windows.SetParent(Form2.Handle,Form1.Handle);

// 方法一,结果占据了父窗口的工具条和状态条的位置。
form2.Align:=alClient;

// 方法二,结果Form2的top有时能出现在预定位置,有时不能。而left在Form1最大化状态
// 时正确,在Form1第一次出现(未最大化)时不正确。
form2.Height:=form1.ClientHeight-form1.CoolBar1.Height-form1.StatusBar1.Height;
form2.Width:=form1.ClientWidth;
form2.Left:=0;
form2.Top:=form1.CoolBar1.Height;


form2.Show;
 
把被容纳的Form改成Frame, 你可以把Frame 当成Form 用。
 
我已经解决了这个问题,办法为在Form1中添加一Panel作为Form2的Parent,
同时overrideCreateParams,这样还可以脱离MDI方式,感觉更有灵活性。不过很
感谢热心的YFeral朋友。
procedure TChildFormModel001.CreateParams(var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
Params.Style := Params.Style or WS_CHILD;
end;
 
顶部