unit Child;
// Have you noticed that when you try to close a MDIChild form // the form minimizes but doesn't disappear from your Main form // client area? // // With this tip you can learn how to really close the MDI child // form and free the memory occupied by the form interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TMDIChildForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private{ Private declarations }public{ Public declarations }end;
var
MDIChildForm: TMDIChildForm;
implementation{$R *.DFM}procedure TMDIChildForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin// This line of code frees memory and closes the form
Action := caFree;
end;
end.
Это пример программирования на Delphi, демонстрирующий, как закрыть форму MDI-ребенка и освободить память, занимаемую формой.
Расшифровка кода:
Декларация модуля
Модуль Child начинается с декларации нового класса TMDIChildForm, который наследуется от TForm. Это означает, что TMDIChildForm - это пользовательский класс формы, расширяющий функциональность стандартного класса TForm.
Секция интерфейса
В секции интерфейса мы декларируем Uses-кальку, которая импортирует различные модули (библиотеки), необходимые для работы кода. Включены:
Windows: предлагает функции и константы, связанные с Windows API.
Messages: содержит типы данных и процедуры, связанные с сообщениями.
SysUtils: предлагает полезные функции для системных задач.
Classes: включает классы, предоставляющие основную функциональность, такие как строки и динамические массивы.
Graphics, Controls, Forms и Dialogs: эти модули связаны с разработкой графического интерфейса пользователя (GUI) в Delphi.
Декларация типа
Мы декларируем тип TMDIChildForm, который является экземпляром пользовательского класса формы, определенного ранее. Этот тип имеет две части:
часть, содержащая приватные переменные или процедуры, специфические для этого класса.
общественная часть, содержащая общественные процедуры и переменные, доступные извне класса.
Декларация переменной
Мы декларируем переменную MDIChildForm типа TMDIChildForm. Она будет хранить экземпляр нашего пользовательского класса формы.
Секция реализации
В секции реализации мы имеем единственную процедуру TMDIChildForm.FormClose, которая вызывается, когда форма готовится к закрытию. Эта процедура принимает два параметра:
Sender: объект, который.triggered событие (в этом случае - сама форма).
Action: переменная типа TCloseAction, указывающая, какой действие должно быть выполнено при закрытии формы.
Внутри процедуры мы устанавливаем значение Action в caFree, что означает, что форма должна быть освобождена и ее память должна быть высвобождена. Это эффективно закрывает форму и освобождает ресурсы, занимаемые ею.
Строка ресурса
Последняя строка $R *.DFM указывает Delphi включить файл ресурсов (.DFM) ассоциированный с этим модулем.
В целом, этот код демонстрирует, как создать пользовательскую форму MDI-ребенка в Delphi, которая может быть закрыта и освобождена от памяти, когда это необходимо.
В этой статье описывается решение проблемы закрытия дочерней формы в приложении MDI, когда она минимальизируется, но не исчезает из клиентской области основной формы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS