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

Как сообщить какую-то глобальную переменную всем окнам программы (даже скрытым)

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

Как сообщить какую-то глобальную переменную всем окнам программы (даже скрытым)

Автор: Олег Кулабухов

Решением для такой задачи является рассылка пользовательского сообщения всем окнам массива Screen.Forms


{Code for Unit1}

const
  UM_MyGlobalMessage = WM_USER + 1;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    { Private declarations }
  private
    procedure UMMyGlobalMessage(var AMessage: TMessage); message
      UM_MyGlobalMessage;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses Unit2;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage);
begin
  Label1.Left := AMessage.WParam;
  Label1.Top := AMessage.LParam;
  Form1.Caption := 'Got It!';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  f: integer;
begin
  for f := 0 to Screen.FormCount - 1 do
    Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42);
end;

{Code for Unit2}

const
  UM_MyGlobalMessage = WM_USER + 1;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private declarations }
    procedure UMMyGlobalMessage(var AMessage: TMessage); message
      UM_MyGlobalMessage;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage);
begin
  Label1.Left := AMessage.WParam;
  Label1.Top := AMessage.LParam;
  Form2.Caption := 'Got It!';
end;

Это код на Delphi, демонстрирующий, как отправить глобальное сообщение всем формам в приложении, включая скрытые.

В Unit1 определено константу UM_MyGlobalMessage как уникальный номер сообщения (WM_USER + 1). Это будет использоваться для отправки пользовательского сообщения другим формам.

Создается форма Form1 с лейблом Label1, кнопкой Button1 и двумя процедурами: FormShow и Button1Click. Последняя отправляет глобальное сообщение всем формам, используя массив Screen.Forms.

В Unit2 создается еще одна форма Form2 с лейблом Label1, которая также переопределяет процедуру UMMyGlobalMessage для обработки сообщения.

Когда кнопка Button1 нажата в Form1, она проходит по всем формам в приложении, используя массив Screen.Forms, и вызывает метод Perform, передавая уникальный номер сообщения (UM_MyGlobalMessage) а также два параметра (WParam и LParam). Это вызовет каждую форму получать сообщение и выполнить соответствующую процедуру UMMyGlobalMessage.

В этом примере, когда кнопка Button1 нажата в Form1, все формы в приложении (включая скрытые) получат сообщение и отобразят свои лейблы с новыми позициями (WParam и LParam) а также обновят свои заголовки до 'Got It!'.

Обратите внимание, что в Delphi можно использовать массив Screen.Forms для доступа к всем открытым формам в приложении. Это глобальная переменная, содержащая массив всех форм, которые текущие отображаются на экране.

Код демонстрирует, как отправить сообщение нескольким формам в приложении с помощью встроенной системы сообщений Delphi.

В статье описывается способ передачи глобальной переменной всем окнам программы, включая скрытые, путем рассылки пользовательского сообщения всем окнам массива Screen.Forms.


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

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




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


:: Главная :: Приложения чужие ::


реклама


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

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