Title: How to 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.