[Lazarus] Sending messages

Hans-Peter Diettrich DrDiettrich1 at aol.com
Sat Nov 26 11:14:48 CET 2011

Mattias Gaertner schrieb:
> On Fri, 25 Nov 2011 22:57:34 +0100
> Hans-Peter Diettrich <DrDiettrich1 at aol.com> wrote:
>> zeljko schrieb:
>>> On Friday 25 of November 2011 14:33:16 Hans-Peter Diettrich wrote:
>>>  > And how does PostMessage fit into the picture?
>>> I'm using PostMessage in an audio application to update position of 
>>> trackbar on mainform from another thread where audio file is loaded and 
>>> playing and it works ok (tested qt and gtk2)
>> This looks like PostMessage is thread-safe, but is not a proof.
> Yes, PostMessage is thread safe.


> The PostMessage function places (posts) a message in the message queue
> and then returns without waiting.

What again raises the question, how many message queues are supported by 
the LCL, and what's required to use them. Until now I suppose that the 
LCL has no platform-independent model for thread message queues, and 
offers TApplication.QueueAsyncCall instead for cross-platform 
applications. Right?

>> I just wonder how a broadcast (to HWND_BROADCAST) works with 
>> SendMessage. But this is a feature that must not be supported for 
>> non-Windows platforms.
> Do you mean "need not"?

Perhaps I meant "must not necessarily...".

Englisch Sprak schwere Sprak ;-)

>>> Qt have similar mechanism: SendEvent() & PostEvent() and it works in 
>>> same way.
>> Are threads supported?
>> The more I try to understand the Lazarus message handling, the more 
>> questions arise :-(
> QT functions are beyond the LCL docs.

Right, but the docs should be valid for *all* platforms. This requires 
to mention cross-platform issues (restrictions...), which affect 
portable applications. What's a method worth, like 
TWidgetset.SystemParameters, when it is only supported on Windows?

It would be nice to get "not implemented" errors or at least "platform 
specific" hints at *compile* time, not only when an application runs on 
a customer's machine.

> The LCL does not support creating windows from other threads.
> You can try doing that by calling the appropriate widget set functions
> yourselves. But I don't know if that will work.
> So, your question is somewhat theoretical, isn't it?

IMO the documentation of the TWidgetset base class is an essential part 
of the Lazarus documentation. It is not only required to understand the 
high-level LCL code, but also is a good place for the documentation of 
the named constants, usable as parameters in many methods across the 
entire LCL.


More information about the Lazarus mailing list