Re: Fenetre Escamotable
Publié : mar. 26/janv./2016 11:50
Tu as remarqué le problème d'affichage à l'ouverture comme je te l'avais signalé et lorsqu'on a un double écran, la fenêtre est toujours apparente.
Dixit Fred sur le forum us il y a quelque temps, sur ce sujet: Les gagdets ne sont redessinés que lors d'une boucle d'attente (WindowEvent()). Une seule itération suffit.nico a écrit :Le problème à l'ouverture est que les gadgets ne sont pas dessinés pendant la transition, ils s'affichent une fois la transition terminée.
Code : Tout sélectionner
While WindowEvent(): Wend
Code : Tout sélectionner
Procedure Move_window(fenetre,direction,vitesse)
;by Dobro
ExamineDesktops()
largeur_bureau=DesktopWidth(0)
larg_fenetre=WindowWidth(fenetre)
Select direction
Case 1 ; vers la gauche
For i=largeur_bureau To (largeur_bureau-larg_fenetre ) Step-1
ResizeWindow(Fenetre, i, #PB_Ignore,#PB_Ignore, #PB_Ignore)
While WindowEvent() : Wend ; <<< *** Boucle à vide pour forcer le rafraichissement des gadgets ***
Delay(vitesse)
Next i
Case -1 ; vers la droite
For i=(largeur_bureau-larg_fenetre) To Largeur_bureau
ResizeWindow(Fenetre, i, #PB_Ignore,#PB_Ignore, #PB_Ignore)
Delay(vitesse)
Next i
EndSelect
EndProcedure
Code : Tout sélectionner
InitMouse()
ExamineDesktops()
Enumeration
#win
EndEnumeration
Enumeration
#bouton
#TACTION
#TMOUSE
EndEnumeration
; ETAT
#FEN_CACHE = 0
#FEN_OUVERTE = 1
; ACTION
#AFFICHE = 1
#CACHE = 2
#STOP = 3
Global.b ETAT, ACTION
Global L_DESK=DesktopWidth(0), H_DESK=DesktopHeight(0), X_WIN, Y_WIN, X_WIN_MAX
Global L_WIN = 220, H_WIN = 400
Global.i Mx, My
Declare Action()
Declare Fermer()
Declare CheckMouse()
ETAT = #FEN_OUVERTE
X_WIN = (L_DESK - L_WIN)
X_WIN_MAX = (L_DESK - 2)
Y_WIN = 100
If OpenWindow(#win, X_WIN, Y_WIN, L_WIN, H_WIN, "Exemple...", #PB_Window_SystemMenu)
ButtonGadget (#bouton, 10, 60, 200, 30, "Fermer")
AddWindowTimer(#win, #TMOUSE, 30)
AddWindowTimer(#win, #TACTION, 100)
BindEvent(#PB_Event_Timer,@CheckMouse(), #win, #TMOUSE )
BindEvent(#PB_Event_Timer,@Action(), #win, #TACTION )
BindEvent(#PB_Event_CloseWindow,@Fermer())
BindGadgetEvent(#bouton,@Fermer() )
Repeat
Event = WindowEvent()
Until quite = 1
End
EndIf
Procedure Fermer()
quite = 1
End
EndProcedure
Procedure CheckMouse()
Mx = DesktopMouseX()
My = DesktopMouseY()
Debug mx
If MX > L_DESK -5 And ETAT = #FEN_CACHE
Debug "Réapparition ON"
ACTION = #AFFICHE
ElseIf MX < X_WIN And ETAT = #FEN_OUVERTE
Debug "Disparition ON"
ACTION = #CACHE
ElseIf MX > X_WIN And ETAT = #FEN_OUVERTE
Debug "RIEN"
ACTION = #STOP
Else
Debug " rien "
ACTION = #STOP
EndIf
EndProcedure
Procedure Action()
Select ACTION
Case #AFFICHE
COmpte = X_WIN_MAX
Debug "OUVERTURE"
Repeat
ResizeWindow(#win, Compte, #PB_Ignore,#PB_Ignore, #PB_Ignore)
UpdateWindow_(GadgetID(#bouton))
Compte-1
Until Compte = X_WIN
ETAT = #FEN_OUVERTE
ACTION = #STOP
Case #CACHE
COmpte = X_WIN
Repeat
ResizeWindow(#win, Compte, #PB_Ignore,#PB_Ignore, #PB_Ignore)
Compte+1
Until Compte = X_WIN_MAX
ETAT = #FEN_CACHE
ACTION = #STOP
EndSelect
EndProcedure
Code : Tout sélectionner
BindEvent(#PB_Event_Timer,@CheckMouse() )
BindEvent(#PB_Event_Timer,@Action() )
Code : Tout sélectionner
BindEvent(#PB_Event_Timer,@CheckMouse(), #win, #TMOUSE )
BindEvent(#PB_Event_Timer,@Action(), #win, #TACTION )