Как сообщить что-нибудь всем формам моего приложения?

Previous  Top  Next

    
 

 

 

Как сообщить всем формам моего приложения (в том числе и не видимым в данный момент) об изминении каких-то глобальных значений?

 

Один из способов - создать пользовательское сообщение и использовать метод preform чтобы разослать его всем формам из массива Screen.Forms.

Code:

{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

{Private declarations}

   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:

{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;

 

 

 

©Drkb::02316