...make each MDIChild fill the entire client area of the main form?

Author: Carlos Borrero

Category: Forms

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.

 

printed from
www.swissdelphicenter.ch
developers knowledge base