[Lazarus] Visual "uglyness" when creating TSynEdit @ runtime in my app

Mattias Gaertner nc-gaertnma at netcologne.de
Fri Jan 4 15:29:50 CET 2013


On Fri, 4 Jan 2013 15:00:13 +0100
Bart <bartjunk64 at gmail.com> wrote:

> Hi,
> 
> I have a text editor (LazEdit on Lazarus CCR) which uses a
> TPageControl to act like a Tabbed Document Interface (much like
> Lazarus SE).
> 
> Upon creating a new Tab it basically does:
> - Add a new TTabSheet to the PageControl
> - Create an instance of a TSynEdit
> - Set TSynEdit.Parent to the newly created TTabSheet
> - Set TSynEdit.Align := alClient
> 
> This works as expected.
> However there is one visual anomaly: when you create a new Tab, for a
> brief moment you can see the TSynEdit, unaligned, with Width and
> Height set to it's defaults (like you would drop it on a Form in
> Lazarus).
> 
> Long time ago, in Delphi, I solved this by doing:
> 
>   Try
>     LockWindowUpdate(TheHandle);
>     ...
>    //Create the TSynEdit, align it etc.
> 
>   Finally
>     LockWindowUpdate(0);
> 
> This delayed any painting up to the point the TSynEdit was aligned.
> However, this is a Windows only fix.
> 
> The relevant code is at:
> https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/applications/lazedit/editorpagecontrol.pp
> (function TEditorPageControl.AddPage: TEditor; appr. at line 994)
> 
> Does anyone have a suggestion how to fix this in a cross-platform manner?

It sounds like a bug in the LCL Win32 interface.
I don't have win32 here to test.
There should be no Paint events during your code. Are there?
What size has the SynEdit after setting Align to alClient and what is
the ClientRect of the tabsheet?

About workarounds:
Set the Parent as last property or enclose the code in 
  BeginAutoSizing;
  EndAutoSizing;


Mattias




More information about the Lazarus mailing list