[Gambas-user] Fit Form to PictureBox

Tobias Boege taboege at ...626...
Wed Dec 31 15:30:27 CET 2014


On Wed, 31 Dec 2014, Gian wrote:
> Il 31/12/2014 01:25, Tobias Boege ha scritto:
> > Hi,
> >
> > I'm trying to have FMain automatically adjust its size according to its sole
> > (for demonstration) child control PictureBox1. The PictureBox1 itself is
> > AutoResize = True and gets a big Picture. (Attached is a little project.)
> >
> > What happens is that PictureBox1 resizes accordingly, so I thought I set
> > FMain.AutoResize = True but FMain does not react to the growing PictureBox1.
> > The interplay between AutoResize, Expand, the parent's Arrangement and a
> > PictureBox' Stretch has always been obscure to me. Does anyone have a
> > solution?
> >
> > Regards,
> > Tobi
> >
> >
> >
> > ------------------------------------------------------------------------------
> > Dive into the World of Parallel Programming! The Go Parallel Website,
> > sponsored by Intel and developed in partnership with Slashdot Media, is your
> > hub for all things parallel software development, from weekly thought
> > leadership blogs to news, videos, case studies, tutorials and more. Take a
> > look and join the conversation now. http://goparallel.sourceforge.net
> >
> >
> >
> > _______________________________________________
> > Gambas-user mailing list
> > Gambas-user at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/gambas-user
> >
> 
> Tobia,
> I'm embarrassed to answer, you are a guru and surely you know this:
>   Picture PictureBox1.Picture = ["icon: / 96 / access"]
>   Me.H = PictureBox1.H
>   Me.W = PictureBox1.W
> because it does not satisfy you?

You're right, this solves the (accidentally over-)simplified scenario I
described. What I havent't told you is that my actual application will have
some levels of layout containers (Panel, HBox, VBox) and then a PictureBox.
Of course there will be other controls and containers next to this hierarchy
and thus using W and H to calculate the correct dimensions will be tedious.

Meanwhile I had a look at the sources and it turns out I need to make gb.qt4
call a thing called arrange_now(). I can achieve that by the sequence

  myContainer.AutoResize = False
  myContainer.AutoResize = True

and indeed if the PictureBox' immediate parent is a Panel or Form and has
Arrangement = Horizontal when executing this sequence, the container will
grow in width together with the picture, and so forth up the container
hierarchy.

My next problem was to have the parents not only grow in width but in width
and height. This happens when arrange_now() is called once with Arrangement
= Horizontal and once with Arrangement = Vertical. The change of Arrangement
also triggers a call to arrange_now(), so I just have to do

  myContainer.Arrangement = Arrange.Vertical
  myContainer.Arrangement = Arrange.Horizontal

in addition to AutoResize being True, to force a re-layout (for Panel and
Form containers). The only problem is other controls which are unwantedly
resized during the Arrangement change but I can deal with it by setting
those controls' Ignore = True temporarily. Not pretty but it works, as you
can see in the attached project.

Now it's up to Benoit to decide if this is worth adding another method, like
Container.Rearrange(). It would call arrange_now() and somehow have
AutoResize containers re-calculate their dimensions (preferably recursive).
(Or to wire this stuff into Container.Refresh()). I'm not particularly happy
with my hack but I don't care enough to insist that there be a new method
for this scenario. But to rephrase my initial question: what is AutoResize
supposed to do (or *when*) if it cannot automatically resize a container
when children resize? (I noticed that the automatic resizing is done
perfectly in both directions and automatically if I put the large picture
into the PictureBox before the form is shown at all...)

Regards,
Tobi

-- 
"There's an old saying: Don't change anything... ever!" -- Mr. Monk
-------------- next part --------------
A non-text attachment was scrubbed...
Name: form-autoresize-picturebox-0.0.2.tar.gz
Type: application/octet-stream
Size: 4660 bytes
Desc: not available
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20141231/397ffd28/attachment.obj>


More information about the User mailing list