0

我想显示一个将使用整个客户区的 MDI 子窗口,即。灰色部分不在任务窗格的右侧,并让子窗口显示其标题栏和边框:

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

这是代码,它不能按计划工作:

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;

除了自己计算坐标(例如ClientWidth等)之外,有没有办法做到这一点?

谢谢你。

4

2 回答 2

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;
于 2009-07-21T14:20:21.340 回答
1

最快的方法是使用 TILE 命令。

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

TILE 是 TForm 的一种方法,如果您只有一个 MDI 子窗口,它将完全按照您的意愿进行操作。如果超过 1,它将排列所有可见的子窗口以适应类似的布局。

瑞安。

于 2009-07-21T18:18:28.087 回答