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

Пример использования локальных форм без глобальных переменных в Delphi

Delphi , ОС и Железо , Windows

Вопрос о глобальных переменных и формах в программировании часто вызывает дискуссии. С одной стороны, глобальные переменные могут упростить доступ к данным из разных частей программы, но с другой стороны, они могут привести к непредсказуемому поведению программы из-за сложности отслеживания зависимости между различными частями кода. В данной статье мы рассмотрим, как можно избежать использования глобальных переменных и форм, используя примеры на языке Object Pascal в среде разработки Delphi.

Локальные формы в классе

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

unit MainFormUnit;

interface

uses
  Winapi.Windows, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, TimerFormUnit;

type
  TMainForm = class(TForm)
    btnOpenTimerForm: TButton;
    procedure btnOpenTimerFormClick(Sender: TObject);
  private
    { Private declarations }
    FTimerForm: TTimerForm; // Локальная переменная для формы с таймером
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.btnOpenTimerFormClick(Sender: TObject);
begin
  if FTimerForm is nil then
    FTimerForm := TTimerForm.Create(nil);
  try
    FTimerForm.Show;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
    FTimerForm.Free;
  end;
end;

end.

В данном примере, при нажатии на кнопку btnOpenTimerForm, создается новая форма FTimerForm, если она еще не существует, и показывается пользователю. Важно обработать возможные исключения и корректно освободить ресурсы формы.

Таймерная форма

Таймерная форма может быть реализована следующим образом:

unit TimerFormUnit;

interface

uses
  Winapi.Windows, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TTimerForm = class(TForm)
    lblDateTime: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  TimerForm: TTimerForm;

implementation

{$R *.dfm}

procedure TTimerForm.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TTimerForm.FormDestroy(Sender: TObject);
begin
  Timer1.Enabled := False;
  inherited;
end;

procedure TTimerForm.Timer1Timer(Sender: TObject);
begin
  lblDateTime.Caption := DateTimeToStr(Now);
end;

end.

Здесь используется событие FormCreate для активации таймера, а FormDestroy - для его деактивации, что предотвращает утечку ресурсов.

Главный модуль программы

В главном модуле программы Project1.dpr настройка главного цикла обработки событий приложения:

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  Vcl.Forms,
  MainFormUnit,
  TimerFormUnit;

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

Использование локальных переменных позволяет избежать глобальных переменных и упрощает управление жизненным циклом форм. При этом важно корректно управлять созданием и уничтожением объектов, чтобы избежать утечек памяти и других проблем.

Создано по материалам из источника по ссылке.

В контексте обсуждается использование локальных форм вместо глобальных переменных в программировании на Delphi, чтобы улучшить управление памятью и упростить структуру программы.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 20:51:04/0.003046989440918/0