[Lazarus] sleep function don't passed before executing the next statement
Martin
lazarus at mfriebe.de
Mon Nov 19 13:44:37 CET 2012
On 19/11/2012 12:17, Eric Kom wrote:
> On 19/11/2012 13:07, Michael Schnell wrote:
>> On 11/19/2012 11:01 AM, Eric Kom wrote:
>>> the Connection procedure is declared as a private
>>>
>> This makes no difference at all.
>>
>> ("private" is just a visibility attribute and has no influence on the
>> functionality whatsoever. Please read the docs on the Object Pascal
>> language.)
> Please did know a link that can send me to Object Pascal Language guide?
This isn't so much about object programming, but about event driven
programming.
Events are processed one by one. Your "Tfrmform1.Connection" is one
event. All other events are only processed, when this returns/finishes.
(or when you call Application.ProcessMessages)
"StatusBar.SimpleText := 'My name is Tux'; "
Does store the new caption, but not yet paint it. It triggers a paint
event, that will be processed later.
During the sleep no events are processed, so nothing is painted to the
screen.
You could call Application.ProcessMessages before the sleep. But
*warning*, this can get messy. During a Application.ProcessMessages your
event ("Tfrmform1.Connection") can be triggered and called again, like this:
StatusBar.SimpleText := 'My name is Tux';
Application.ProcessMessages;
StatusBar.SimpleText := 'My name is Tux';
Application.ProcessMessages
// ... and maybe called again ...
sleep(100);
StatusBar.SimpleText := 'am ready';
sleep(100);
StatusBar.SimpleText := 'am ready';
You can also try
StatusBar.Update;
This will (or should) do an immediate paint (do NOT call paint directly!)
Also note: during a sleep your app does not react. If a user resizez the
window, it will not paint. So if you put is longer sleeps, your app will
become none responsive to the user.
More information about the Lazarus
mailing list