[fpc-pascal] Message methods

Jorge Aldo G. de F. Junior jagfj80 at gmail.com
Tue Apr 19 22:23:17 CEST 2011


will it really traverse the classes ?

from what i understood about the manual (and i heavily use that
mechanism) it will only trigger the class where you dispatch to, so,
self.dispatch(msg) only works for the TForm.

if you need more than that you will need to traverse the component
tree yourself. but this is not trully hard to do with tcomponents.

but i may be wrong...

2011/4/19 Darius Blaszyk <dhkblaszyk at zeelandnet.nl>:
>
> On Apr 19, 2011, at 6:04 PM, Mattias Gaertner wrote:
>
>
>
>
>
> dhkblaszyk at zeelandnet.nl hat am 19. April 2011 um 17:48 geschrieben:
>
> Hi,
>
> I'm trying to understand how message methods work in FPC. For this I created
> a simple app that shows a message. I also created a second (identical form)
> and I expected that all message methods related to MY_MESSAGE would be
> executed when I pressed either one or the other button. This did not happen
> however even when dispatching through the Application object. Can someone
> explain me please?
>
> Regards, Darius
>
>
>
> Make sure TMsg starts with
>
>
>
> TMsg = record
>   MsgID: DWord;
>   ...
>
> I used a cardinal instead, so no issues there, although I expected to get
> two messages as I have two forms open (code for both identical to the code
> shown below). Instead when I dispatch the message only the class which
> dispatches the message receives it. The other class never does. So how is
> the message handler traversing the classes within the process? I must be
> missing something obvious.
> Darius
>
>
>   TForm1 = class(TForm)
>     Button1: TButton;
>     Button2: TButton;
>     procedure Button1Click(Sender: TObject);
>     procedure Button2Click(Sender: TObject);
>     procedure MessageReceiver(var msg: TMsg); message MY_MESSAGE;
>   private
>     { private declarations }
>   public
>     { public declarations }
>   end;
>
> var    Form1: TForm1;
>
> implementation
>
> {$R *.lfm}
>
> { TForm1 }
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>   msg.MSGID := MY_MESSAGE;
>   msg.Data := 'Hello World!';
>   Dispatch(msg);
> end;
>
> procedure TForm1.Button2Click(Sender: TObject);
> begin
>   Form2.Show;
> end;
>
> procedure TForm1.MessageReceiver(var msg: TMsg);
> begin
>   ShowMessage(msg.Data);
> end;
>
>
>
> Mattias
>
>
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>



More information about the fpc-pascal mailing list