[Gambas-user] Resize event...

Doriano Blengino doriano.blengino at ...1909...
Sun Nov 9 10:25:46 CET 2008


Stephen Bungay ha scritto:
>    A form, lets call it "FormX" contains a tabStrip which has another 
> form, call it "FormY" dynamically instantiated inside the TabStrip at 
> run-time. FormY has three controls on it, a calendar, a table, and a 
> VSplit to seperate them.
>    When FormX is resized the TabStrip is resized and I want to couple 
> this to FormY by firing it's resize event. I do this by explicitly 
> calling what I think is the FormY.Resize event, but FormY.Resize wants 
> Width and Height paramters passed to it. This I find kind of strange 
> because FormY_Resize has no Width and Height Parameters in the declared 
> in the event.
>    When the code is stepped through the FormY_Resize does not fire when 
> FormY.Resize(Width,Height) is called and the controls stubbornly remain 
> the size they were when initialized.
>    A couple of questions;
>
> 1. Why does FormY.Resize want Width and Height parameters when clearly 
> there are no such parameters in the FormY_Resize event?
>
> 2. Why is FormY_Resize not firing?
>   
Do not confuse the resize method with the resize event.

You use the resize method when you want your form be resized, by program 
code. For example, the program loads a picture from disk, and then wants 
the form to adapt to the size of the picture. So the program issues a 
"me.resize(hPhoto.width, hPhoto.height)" (well, not exactly so, but you 
catch the idea).

The resize event is fired from the external world, and the form "waits" 
for it to do something more than merely readjust its children controls.
If you want to simply rearrange childrens, then a set of powerful 
features can be used (panels, h/vboxes, expand, ignore...), and chances 
are that you succed.

So, in the first case, you command the form to resize, and you also have 
to tell it what sizes to assume. In the second case, the world tells you 
that the form dimensions are changed; you can read the new dimensions in 
the Width and Height properties, and take appropriate actions.
This is why Form.resize() method takes parameters, and Form_Resize() 
takes none; because the latter case is only a signal, and you can be not 
interested in the real dimensions, only want to know that the user 
resized the form.

Apart from this clarification, I had a hard debate with Benoit about 
embedding forms inside tabstrips. What I remember about the end, is that 
resize events will not raise. Full stop. I think this is an omission, 
because when the size of the form changes, a resize event should be 
fired no matter if the form is child of the desktop or child of a tabstrip.

I tried several way to solve, and found none (well, something could be 
done by using horrible hacks, which breaked form/tabstrip independency). 
But a stupid trick could be this one:

Put a timer on the form, and declare two private variables like 
"mywidth" and "myheight".
Every second, or whatever, the timer event fires, and you do:

    sub timer1_timer()
      if mywidth=me.width and myheight=me.height then return   ' nothing 
happened
      ' form has been resized
      mywidth = me.width
      myheight = me.height
      ' additional code...
    end

Funny uh?

Salutations,
Doriano





More information about the User mailing list