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 <dhkblas...@zeelandnet.nl>:
>
> On Apr 19, 2011, at 6:04 PM, Mattias Gaertner wrote:
>
>
>
>
>
> dhkblas...@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@lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to