[lazarus] Alignment

Mattias Gaertner nc-gaertnma at netcologne.de
Tue Aug 12 10:53:57 EDT 2003


On Tue, 12 Aug 2003 16:34:24 +0200
Micha Nelissen <M.Nelissen at student.tue.nl> wrote:

> Hi,
> 
> Currently aligning is done recursively, if you setbounds on a form which 
> has a nested tabcontrol with a nested form with a nested form then the 
> recursion goes down to the last form setting width/height and back up. 
> The problem is that the win32 interface have differences between 
> window/client size and this cannot be compensated if this resizing is 
> done in one step. You can see this bug in the object inspector, 
> differences accumulate causing the scrollbar to be partly visible among 
> other things. It could be done if the form aligned it's controls and 
> those controls call the interface immediately with their new 
> position/size. Then the interface will report the new size back to the 
> lcl which then continues aligning it's controls until all is done.
> 
> How about it?

We can add an interface function, to ask if bounds should be cached or sent
directly. But before doing this, we should make sure that the win32 intf is
doing, what it is told do to.
I have created a new example with a three nested groupboxes, all
Align=alClient. (Unable to commit, because now the name server does not even
know cvs.freepascal.org).

When you do this and add writeln in TWinControl.DoSendBoundsToInterface; and
TWinControl.InvalidateClientRectCache;, you can see at least three bugs:

- The form is not resized after the LCL asked 
  the win32 interface to do so.
- the groupboxes are not resized after the LCL
  asked the second time the win32 interface to do so
- The win32 intf does not tell the LCL, that
  the clientrect of the groupboxes have changed 

I think, these bugs must be fixed first before optimizing the LCL.
 

Mattias






More information about the Lazarus mailing list