Решением для такой задачи является рассылка пользовательского сообщения всем
окнам массива 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 }privateprocedure 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;
beginfor 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.