[Lazarus] Zooming a form

Mattias Gaertner nc-gaertnma at netcologne.de
Thu Jun 23 10:00:55 CEST 2016

On Thu, 23 Jun 2016 09:35:15 +0200
Martin Grajcar <maaartinus at gmail.com> wrote:

>[...]also BaseParentClientSize, which gets taken from the actual parent,
> which has zero size at the moment.

...which is a show stopper for right anchoring.

> BaseBounds/BaseParentClientSize is set when you call SetBounds (e.g.
> > when setting Left, Top, Width, Height).  
> My debugger agrees with you. I don't ask why so complicated. ;)

One part Delphi compatibility, one part flexibility for custom controls.

> > > The zero-client-size parent is a TPage, but I can't claim it guilty as I
> > > couldn't reproduce my problem in a small example.  
> >
> > Do you mean it does work in a small example, but it does not in your
> > complex application?
> >  
> Exactly. I thought that there might be a bug in TNotebook/TPage leading to
> zero client area, but this isn't the case.

Let's see if I can follow you:
Do you mean, when you set the bounds and anchors of the control the
BaseParentClientSize is 0,0 and Parent.ClientRect has non 0 values?

> I sort of intentionally did not use it: I use no align and no autosize
> (just anchors), so I though I won't need it.

Without Disable/EnableAlign the AutoSize algorithm kicks in after each
property change. And because anchoring is context sensitive, it is
better to make sure. Also it avoids some overhead, which can load a
form much faster.

> However, for the future, I'm curious if there's a simple way of storing
> additional information for a control without subclassing it. Let's say, I
> need to store the *original* font size of *every* control. And I don't want
> to run to any problems when the control gets freed.

There is no LCL-built-in user storage space. You need to use
subclassing or some other objects to store your settings.


More information about the Lazarus mailing list