Page 1 sur 1

[PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : sam. 31/mai/2014 18:40
par falsam
Le mode de fonctionnement de ResizeGadget() change.

■ Le positionnement ou redimensionnement des gadgets se fait une fois que le redimensionnement de la fenêtre est terminée afin d'éviter les effets de flickering.

Code : Tout sélectionner

Enumeration
  #Mainform
  #Button
EndEnumeration

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget, Event

OpenWindow(#Mainform, 0, 0, 500, 400, "Window Resize", WindowStyle)
ButtonGadget(#Button, 400, 30, 80, 24, "My Button")

Repeat
  Event  = WaitWindowEvent(10)
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
      
    Case #PB_Event_SizeWindow
      ResizeGadget(#Button, WindowWidth(#Mainform)-100, #PB_Ignore, #PB_Ignore, #PB_Ignore)
      
  EndSelect
ForEver
■ Pour obtenir un redimensionnement ou un repositionnement des gadgets en temps reel, il faut passer par la fonction BindEvent() avec un appel à une procédure.

Code : Tout sélectionner

Enumeration
  #Mainform
  #Button
EndEnumeration

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget, Event

Procedure OnResize()
  ResizeGadget(#Button, WindowWidth(#Mainform)-100, #PB_Ignore, #PB_Ignore, #PB_Ignore)
EndProcedure


OpenWindow(#Mainform, 0, 0, 500, 400, "Window Resize", WindowStyle)
ButtonGadget(#Button, 400, 30, 80, 24, "My Button")

BindEvent(#PB_Event_SizeWindow, @OnResize(), #Mainform)

Repeat
  Event  = WaitWindowEvent(10)
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
            
  EndSelect
ForEver
Et non ce n'est pas un bug :)
The #PB_Event_SizeWindow and #PB_Event_MoveWindow events are no longer reported in realtime in the main event loop. This is to reduce problems with flickering on resize. To get realtime events you have to use the BindEvent() function and a callback in the future.

Re: [PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : sam. 31/mai/2014 18:54
par nico
C'est super cette initiative, de faire des exemples sur les nouveautés et les changements, on le voit beaucoup sur le Forum allemand.

Tu pourrais tout regrouper peut être ?

Re: [PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : sam. 31/mai/2014 19:01
par falsam
@Nico : Je découvre au fur et à mesure ces très nombreux changements. Difficile de les regrouper quoi que je pourrais mettre mes découvertes dans Information et tutoriaux. Après tout c'est bien une information.

Re: [PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : sam. 31/mai/2014 20:22
par graph100
Si je comprend bien, la procédure liée à l'event #PB_Event_SizeWindow est appelée plus souvent que si on détecte l'event dans la boucle ?

Merci pour l'exemple :D

Re: [PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : jeu. 07/août/2014 7:02
par Anonyme2
Excellent ces petits exemples.
A mettre dans la doc si possible avant que ça ne parte aux oubliettes.

Merci falsam. :D

Re: [PB 5.30] ResizeGadget : Changement de fonctionnement

Publié : jeu. 07/août/2014 9:01
par Ar-S
Merci Falsam, +1 pour l'ajouter dans la doc.
J'ai toujours du mal avec les bindevent, c'est pourtant très pratique et même assez lisible dans le code mais les vieilles habitudes sont tenaces. :)