2 petites fonctions pour redimensionner fenetres et gadgets avec une durée de transition
note:
la gestion du timer n'est pas tres adaptée à ce type d'utilisation
ça serait bien d'avoir une fonction:
AddTimer(#Timer , Timeout, @Callback() )
avec possibilité de de mettre #PB_all, pour s'assurer d'avoir un numero de timer dispo
(et FreeTimer(#Timer) )
Code : Tout sélectionner
EnableExplicit
;#############################################################################################################################
; ResizeGadgetEx, ResizeWindowEx
;#############################################################################################################################
Structure sgpos
x.l
y.l
w.l
h.l
EndStructure
Structure sgresize
w.b
n.i
p0.sgpos
p1.sgpos
ei.i
duration.i
EndStructure
Global NewMap grz.sgresize()
Procedure event_timer_resize()
Static ei,c:c+1
Protected d,r.f
ForEach grz()
With grz()
d=ElapsedMilliseconds()-\ei
r=d/\duration:If r>=1:r=1:EndIf
r=Sin(r*#PI/2)
If \w
ResizeWindow(\n,\p0\x+(\p1\x-\p0\x)*r,\p0\y+(\p1\y-\p0\y)*r, \p0\w+(\p1\w-\p0\w)*r,\p0\h+(\p1\h-\p0\h)*r)
Else
ResizeGadget(\n,\p0\x+(\p1\x-\p0\x)*r,\p0\y+(\p1\y-\p0\y)*r, \p0\w+(\p1\w-\p0\w)*r,\p0\h+(\p1\h-\p0\h)*r)
EndIf
If d>=\duration:DeleteMapElement(grz()):EndIf
EndWith
Next
EndProcedure
Procedure ResizeGadgetEx(gadget,x,y,width,height,duration)
With grz(Str(gadget))
\n=gadget
\p0\x=GadgetX(gadget):\p1\x=x
\p0\y=GadgetY(gadget):\p1\y=y
\p0\w=GadgetWidth(gadget):\p1\w=width
\p0\h=GadgetHeight(gadget):\p1\h=height
\ei=ElapsedMilliseconds()
\duration=duration
EndWith
EndProcedure
Procedure ResizeWindowEx(window,x,y,width,height,duration)
With grz(Str(window))
\n=window
\p0\x=WindowX(window):\p1\x=x
\p0\y=WindowY(window):\p1\y=y
\p0\w=WindowWidth(window):\p1\w=width
\p0\h=WindowHeight(window):\p1\h=height
\ei=ElapsedMilliseconds()
\duration=duration
\w=1
EndWith
EndProcedure
;#############################################################################################################################
; DEMO
;#############################################################################################################################
Procedure gresize()
ResizeGadgetex(EventGadget(),Random(300),Random(300),Random(400,50),Random(200,20),Random(2000,200))
EndProcedure
Procedure wresize()
ResizeWindowEx(EventWindow(),Random(600),Random(600),Random(600,300),Random(600,300),Random(2000,200))
EndProcedure
Define i,j,ng
For j=0 To 3
OpenWindow(j,0,0,200,200,"click on the window"):BindEvent(#PB_Event_LeftClick,@ wresize(),j)
For i=0 To 3:ng=j*10+i:ButtonGadget(ng,100,10+i*100,400,50,"click me"):BindGadgetEvent(ng,@ gresize()):Next
ResizeWindowEx(j,j*200,j*100,600,600,1000)
Next
AddWindowTimer(0,0,20)
BindEvent(#PB_Event_Timer,@ event_timer_resize())
CompilerIf #PB_Compiler_OS <> #PB_OS_Web:Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow:CompilerEndIf