ResizeGadgetex et ResizeWindowEx (PB/SB)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

ResizeGadgetex et ResizeWindowEx (PB/SB)

Message par Guillot »

salut,

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
Dernière modification par Guillot le jeu. 28/sept./2017 16:44, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ResizeGadgetex et ResizeWindowEx (PB/SB)

Message par falsam »

Joli effet. Merci pour ce partage.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: ResizeGadgetex et ResizeWindowEx (PB/SB)

Message par Kwai chang caine »

Oui c'est rigolo :D
Un tres léger flickering au resizing des gadgets chez moi (peut être ce que tu voulais dire pour le timer), mais c'est cool
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

Re: ResizeGadgetex et ResizeWindowEx (PB/SB)

Message par Guillot »

ouai, c'est un peu crado sur PB
mais sur SB c'est propre, ça permettra de faire des petites anim sans se casser le derche
le problème de la gestion des timer, c'est de devoir les rattacher à une fenetre et de pas avoir accès à un numéro libre (comme les autre objet avec #PB_all)
Répondre