Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Каждую дочернюю форму заставить полностью заполнять область главной

Delphi , Программа и Интерфейс , MDI приложения

Каждую дочернюю форму заставить полностью заполнять область главной

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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.

Текст кода на языке Паскаль, который создает приложение Delphi с формой MDI (Multiple Document Interface), где основная форма (MDIForm) может создавать и управлять множеством дочерних форм (TMDIChildForm). Цель этого кода - обеспечить, чтобы каждая дочерняя форма полностью занимала клиентскую область родительской формы.

Расшифровка кода:

  1. Класс TMDIForm наследуется от TForm и имеет два приватных переменные: FMainWindowClientCoordinates и FMainWindowCoordinates. Эти переменные хранят координаты клиентской области основной формы.
  2. Процедура SetMainWindowClientCoordinates устанавливает значение FMainWindowClientCoordinates.
  3. Процедура NewChild создает новую дочернюю форму (TMDIChildForm) и инициализирует ее свойства на основе координат клиентской области родительской формы, чтобы каждая дочерняя форма полностью занимала клиентскую область родительской формы.
  4. В обработчике события FormShow код получает координаты клиентской области основной формы с помощью Windows.GetClientRect.
  5. Когда создается новая дочерняя форма, она позиционируется на тех же координатах, что и родительская форма, с шириной и высотой, равными ширине и высоте клиентской области родительской формы.

Чтобы достичь цели полного занятия клиентской областью родительской формы для каждой дочерней формы, вы можете модифицировать процедуру NewChild следующим образом:

procedure TMDIForm.NewChild(Sender: TObject);
var
  LocalMDIChildForm: TMDIChildForm;
begin
   // Создать новую дочернюю форму и инициализировать ее свойства
  LocalMDIChildForm := TMDIChildForm.Create(Self);

  with LocalMDIChildForm do
  begin
    Caption := 'Дочерняя форма: ' + IntToStr(MDIChildCount);
    Position := poOwnerFormCenter; // Эта строка обеспечивает центрирование дочерней формы
    Show;
  end; // with ...
end;

Используя Position := poOwnerFormCenter, вы обеспечиваете, что каждая дочерняя форма позиционируется в центре своей родительской формы, полностью занимая клиентскую область.

Заметка: константа poOwnerFormCenter является частью Delphi VCL (Visual Component Library) и используется для указания поведения позиционирования дочерней формы. В этом случае она центрирует дочернюю форму относительно ее родительской формы.

В статье описывается пример создания интерфейса Multiple Document Interface (MDI) в Delphi, где каждая дочерняя форма заполняет полный клиентский регион главной формы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:21:47/0.0058119297027588/1