Make each MDIChild fill the entire client area of the main form

Spread the love

Make each MDIChild fill the entire client area of the main form

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TMDIForm = class(TForm)
  private
    { Private declarations }
    FMainWindowClientCoordinates: TRect;
    procedure SetMainWindowClientCoordinates(const Value: TRect);
    procedure NewChild(Sender: TObject);
  public
    { Public declarations }
    // property used to read MainForm client coordinates
    property MainWindowClientCoordinates: TRect
      read FMainWindowClientCoordinates write SetMainWindowClientCoordinates;
  end;

var
  MDIForm: TMDIForm; // Main form, property "formStyle" has to be fsMdiForm

implementation

{$R *.DFM}

uses
  Child; // Defines TMDIchild class, property "formStyle" has to be fsMdiChild

procedure TMDIForm.SetMainWindowClientCoordinates(const Value: TRect);
begin
  FMainWindowClientCoordinates := Value;
end;

procedure TMDIForm.SetMainWindowCoordinates(const Value: TRect);
begin
  FMainWindowCoordinates := Value;
end;

procedure TMDIForm.FormShow(Sender: TObject);
begin
  // Reads MDIForm client coordinates
  Windows.GetClientRect(ClientHandle, fMainWindowClientCoordinates);
end;

procedure TMDIForm.NewChild(Sender: TObject);
var
  LocalMDIChildForm: TMDIChildForm;
begin
  // You can execute this procedure each time you
  // create a new child, for example you can call this
  // procedure from a button
  LocalMDIChildForm := TMDIChildForm.Create(Self);
  with LocalMDIChildForm do
  begin
    Caption := 'Child Form: ' + IntToStr(MDIChildCount);
    Top     := MainWindowClientCoordinates.Top;
    Left    := MainWindowClientCoordinates.Left;
    Width   := MainWindowClientCoordinates.Right;
    Height  := MainWindowClientCoordinates.Bottom;
    Show;
  end; // with ...
end;

end.