Rafraichissement d'un webgadget dans un panelGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Rafraichissement d'un webgadget dans un panelGadget

Message par olivier »

Salut à tous les insomniacs 8O et les autres

Voilà, j'ai mis une webGadget dans un PanelGadget, et lorsque je déplace la fenetre (cliquer glisser sur la barre bleu) l'affichage dans le webgadget disparet (des fois).

J'aimerais une solution sans
SetGadgetState(#Web,#PB_Web_Refresh)
car dans mes pages il y a des animation flash et cela les remet au début.

Voilà un bout de code Test

Code : Tout sélectionner

If OpenWindow(1, 0, 0, 1360, 1024,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "Ess")
    If CreateGadgetList(WindowID())
        PanelGadget(4, 0, 0, 1300, 1000)
        AddGadgetItem(4, -1, "Animation")
        WebGadget(3, 2, 40, 1200, 930, "http://forums.purebasic.fr/")
   EndIf
    
    MoveWindow(0,0)
    x=GetSystemMetrics_(0)
    y=GetSystemMetrics_(1)
    ResizeWindow(x,y )
    ResizeGadget(4, 5, 5, x-10,y-10)  
    ResizeGadget(3, 10, 10, x-30,y-90) 

    
    Quit=0
    Repeat
        Delay(1)
        Select WindowEvent()
            Case #WM_CLOSE
                Quit=1
        EndSelect
        
    Until Quit=1
    
EndIf
End
Merci d'avance pour vos réponses et vos
:idea:
a+
:wink:
Vive le temps libre !
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Déjà il faudrait ajouter CloseGadgetList() après ton WebGadget() pour fermer ton PanelGadget()

et je ne suis pas sûr que WindowEvent() soit la meilleure solution pour les rafraîchissements rapides, peut-être avec WaitWindowEvent() ...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

Bon voilà et alors..... :?

Code : Tout sélectionner

If OpenWindow(1, 0, 0, 1360, 1024,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "Ess")
    If CreateGadgetList(WindowID())
        PanelGadget(4, 0, 0, 1300, 1000)
        AddGadgetItem(4, -1, "Animation")
        WebGadget(3, 2, 40, 1200, 930, "http://forums.purebasic.fr/")
        CloseGadgetList() 
    EndIf
    
    MoveWindow(0,0)
    x=GetSystemMetrics_(0)
    y=GetSystemMetrics_(1)
    ResizeWindow(x,y )
    ResizeGadget(4, 5, 5, x-10,y-10) 
    ResizeGadget(3, 10, 10, x-30,y-90)
    
    
    Quit=0
    Repeat
        ;Delay(1)
        Select WaitWindowEvent()
            Case #WM_CLOSE
                Quit=1
        EndSelect
        
    Until Quit=1
    
EndIf
End 
Vive le temps libre !
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

...et alors je ne vois pas où est ton problème.
j'ai beau déplacer la fenêtre dans tous les sens, tout reste en ordre et rien ne disparaît.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Moi je vois bien où est le problème :lol:
En fait, tu dois te repositionner sur l'onglet qui contient le WebGadget à chaque fois que tu bouges la fenêtre, comme ça il n'y a plus de problème avec le rafraichissement, sinon effectivement il arrive qu'il manque des morceaux...
A priori je pense que ça devrait le faire pour tes anims flash car on ne demande pas à rafraichir la page affichée dans le navigateur, juste le contenu de l'onglet.
Dis nous si c'est OK sur ce point.

Je te propose la solution ci-dessous, si qqn peut m'indiquer comment retrouver les indices des onglets (0 et 1) à partir des constantes #Onglet1 et #Onglet2, je suis preneur...

Code : Tout sélectionner

Enumeration
#MaFenetre
#MaBoite
#Onglet1
#MonNavigateur
#Onglet2
#MonBouton
EndEnumeration

If OpenWindow(#MaFenetre, 0, 0, 800, 600,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "Ma Fenêtre") 
 If CreateGadgetList(WindowID(#MaFenetre))
    PanelGadget(#MaBoite, 0, 0, 795, 595) 
     AddGadgetItem(#MaBoite,#Onglet1,"Onglet 1")
      WebGadget(#MonNavigateur, 5, 5, 780, 555, "http://forums.purebasic.fr/")  
     AddGadgetItem(#MaBoite, #Onglet2, "Onglet 2")
      ButtonGadget(#MonBouton, 10, 15, 80, 24,"Mon Bouton")
    CloseGadgetList()
 EndIf 
    
;Ajuste la taille de la fenetre à la taille de l'ecran
SystemParametersInfo_(#SPI_GETWORKAREA,0,rect.RECT,0) 
Largeur=rect\right
Hauteur=rect\bottom
MoveWindow_(WindowID(#MaFenetre),0,0,Largeur,Hauteur,1) 

;Recalcule la taille de la boite
ResizeGadget(#MaBoite, 5, 5, Largeur-15, Hauteur-35) 
;Recalcule la taille du navigateur
ResizeGadget(#MonNavigateur, 10, 10, Largeur-40, Hauteur-80)   

 Repeat 
  Evenement = WaitWindowEvent()
  If Evenement = #WM_MOVE          ; si on deplace la fenetre
   If GetGadgetState(#MaBoite) = 0 ; si on se trouve sur l'onglet contenant le WebGadget (le premier onglet est le 0)
    SetGadgetState(#MaBoite,0)     ; on se repositionne sur l'onglet contenant le WebGadget                                
   EndIf                          ; ça évite les bugs de rafraichissement
  EndIf
 Until Evenement = #PB_Event_CloseWindow 
EndIf 
End
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

Salut Regis,

Merci pour ta réponse, que je n'avais pas vue passez.... :? Désolé

Mais oui, j'ai résolu cela comme ça : en se repositionnant sur le bon onglet.

Merci encore
Vive le temps libre !
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Content d'avoir aidé :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Je te propose la solution ci-dessous, si qqn peut m'indiquer comment retrouver les indices des onglets (0 et 1) à partir des constantes #Onglet1 et #Onglet2, je suis preneur...
l'utilisation de enumeration n'est pas toujour judicieuse :D

quelques fois un simple #constante=2
est plus simple au moins tu est sur de connaitre la valeur de ta constante

d'un autre coté la doc dit
Enumeration
#GadgetInfo ; Sera 0
#GadgetText ; Sera 1
#GadgetOK ; Sera 2
EndEnumeration
donc retrouver la valeur n'est pas trop compliqué ! :D
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Merci Dobro, tu as raison c'est plus pratique avec les constantes.
J'ai refait mon exemple, et je me suis aperçu d'un truc bizarre.
Lorsque on lance le prog pour la premiere fois, si on clique sur l'onglet 2, ça génère l'évènement #WM_MOVE alors que la fenêtre n'a pas bougé... Si ensuite on s'amuse a basculer d'un onglet à l'autre (sans bouger la fenetre), ça ne genere pas cet evenement. C'est un bug ou ???

Code : Tout sélectionner

Enumeration
#MaFenetre ;0
#MaBoite   ;1
#MonNavigateur ;2
#MonBouton ;3
EndEnumeration
#Onglet1=0
#Onglet2=1

If OpenWindow(#MaFenetre, 0, 0, 800, 600,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "Ma Fenêtre") 
 If CreateGadgetList(WindowID(#MaFenetre))
    PanelGadget(#MaBoite, 0, 0, 795, 595) 
     AddGadgetItem(#MaBoite,#Onglet1,"Onglet 1")
      WebGadget(#MonNavigateur, 5, 5, 780, 555, "http://forums.purebasic.fr/")  
     AddGadgetItem(#MaBoite, #Onglet2, "Onglet 2")
      ButtonGadget(#MonBouton, 10, 15, 80, 24,"Mon Bouton")
    CloseGadgetList()
 EndIf 
    
;Ajuste la taille de la fenetre à la taille de l'ecran
;ExamineDesktops()
;Largeur=DesktopWidth(0)
;Hauteur=DesktopHeight(0)
;MoveWindow_(WindowID(#MaFenetre),0,0,Largeur,Hauteur,1) 

;Recalcule la taille de la boite
;ResizeGadget(#MaBoite, 5, 5, Largeur-15, Hauteur-35) 
;Recalcule la taille du navigateur
;ResizeGadget(#MonNavigateur, 10, 10, Largeur-40, Hauteur-80)   

 Repeat 
  Evenement = WaitWindowEvent()
  If Evenement = #WM_MOVE          ; si on deplace la fenetre
   MessageRequester("INFO","Evenement #WM_MOVE détecté",#PB_MessageRequester_Ok)  
   Select GetGadgetState(#MaBoite)
    Case #Onglet1 ; si on se trouve sur l'onglet contenant le WebGadget (le premier onglet est le 0)
     MessageRequester("INFO","Vous êtes sur l'onglet 1",#PB_MessageRequester_Ok)
     SetGadgetState(#MaBoite,#Onglet1) ; on se repositionne sur l'onglet contenant le WebGadget                                                                       ; ça évite les bugs de rafraichissement
    Case #Onglet2 ; juste pour debugger...
     MessageRequester("INFO","Vous êtes sur l'onglet 2",#PB_MessageRequester_Ok)
   EndSelect
  EndIf
 Until Evenement = #PB_Event_CloseWindow 
EndIf 
End
Répondre