Code : Tout sélectionner
; *************************************************************************************************************************
; ************************************** ANIME FENETRE V2 *******************************************************
; *************************************************************************************************************************
; *************************************************************************************************************************
; *************************************************************************************************************************
; explication :
; il y a quelques temps 1 ou 2 ans !!!! (pour les nouveau qui saurai pas : D )
; j'avais commencé une serie de fonctions pour animer les fenetres a la fermeture de celle-ci !
; Le Soldat inconu avait fait une version interessante .. (qu'est devenu ce travail ?? )
; je me suis aperçut que sur Code Archive quelqu'un avait fait un truc equivalent !
; je ne saurai dire qui a été le premier a y penser !! : D
; peut importe ! (mais je crois bien que c'est MOA !! Smile ..... comme toujours ! Very Happy )
; j'ai donc repris Mon code (le miens a MOA !! : D) , pour ajouter des effets de fermeture
; grace au code que le Soldat inconu avait publié sur les fenetres bizard (ronde triangulaire ect ...)
; je me suis servi en grande partie du code permettant de faire un trou dans une fenetre
; du coup plein d'effets nouveaux, et surtout maintenant des effets d'apparition de fenetre
;ce sont 2 procedures facilement transformable en librairie
; la procedure d'ouverture de fenetre
; -------------------------------------------------
; ouvre_win(#Fenetre,x,y,largeur_fenetre,hauteur_fenetre,options,titre$,mode_d'apparition$ )
; la procedure de fermeture de fenetre
; ----------------------------------------------------
; ferme_win(#Fenetre,mode de disparition$)
; ps: Les Modes d'apparition et de Disparition sont listé plus bas !
; *************************************************************************************************************************
; *************************************************************************************************************************
; *************************************************************************************************************************
; *************************************************************************************************************************
; *************************************************************************************************************************
; voici un exemple simple d'utilisation :
Declare ferme_win(num_fenetre,type.s)
Declare ouvre_win(num_fenetre,x,y,larg,haut,Options,titre$,type.s)
Enumeration
    #Fenetre
    #Button_OK
    #Text_0
EndEnumeration
; ******** on ouvre une fenetre a l'aide de ma procedure ***********
ouvre_win( #Fenetre , 321, 217, 257,300, #PB_Window_SystemMenu,"dobro presente" , "apparait_trou_4"  )
  ; *******************************************
; **** on dessine les gadget dedans ****
If CreateGadgetList ( WindowID (#Fenetre))
    ButtonGadget ( #Button_OK , 102, 200, 66, 33, "ha ben ouaip ! " )
    TextGadget ( #Text_0 , 35, 15, 132, 180, "voici les fenetres animée" + Chr (10)+ "essayez de quitter avec le bouton" + Chr (10)+ "ou la croix rouge" + Chr (10)+ "2 effets differents" + Chr (10)+ " apreciez les effets en vous mettant sur le bureau ! " )
    SetGadgetFont ( #Text_0 , FontID1)
EndIf
  ; *******************************************
; ********* la boucle principale **********
Repeat
    Event= WaitWindowEvent ()
    
    ; ********** y a t'il des gadgets ? ****
    If Event = #PB_Event_Gadget ; ok on gere !
        GadgetID = EventGadget()
        
        If GadgetID = #Button_OK
            ferme_win( #Fenetre , "trou_2" ) ; voici la fonction qui fait partir la fenetre !
            End
        EndIf
        
    EndIf
    ; ****************************************
    
Until Event=#PB_Event_CloseWindow ; on ferme la fenetre avec la croix rouge ?
ferme_win( #Fenetre , "go_droite" ) ; voici la fonction qui fait partir la fenetre avec un effet different !
; *******************************
; voici les modes de d'apparition de fenetres
; ------------------------------------------------------
; ************************************************************************************************
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_1" )
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_bas_droite" )
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_droite")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_bas")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_trou")
;ouvre_win(#Fenetre1,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_trou_2")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_trou_3")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_trou_4")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","apparait_trou_5")
; ************************************************************************************************
; voici les modes de disparition de fenetre
; -------------------------------------------------------------
;ferme_win(#Fenetre,"larg")
;ferme_win(#Fenetre,"haut")
;ferme_win(#Fenetre,"elast")
;ferme_win(#Fenetre,"elast2")
;ferme_win(#Fenetre,"go_gauche")
;ferme_win(#Fenetre,"go_droite")
;ferme_win(#Fenetre,"go_haut")
;ferme_win(#Fenetre,"go_bas")
;ferme_win(#Fenetre,"trou_1")
;ferme_win(#Fenetre,"trou_2")
;ferme_win(#Fenetre,"trou_3")
;ferme_win(#Fenetre,"trou_4")
;ferme_win(#Fenetre,"trou_5")
;ferme_win(#Fenetre,"trou_6")
;ferme_win(#Fenetre,"trou_7")
;ferme_win(#Fenetre,"trou_8")
;ferme_win(#Fenetre,"trou_9")
;ferme_win(#Fenetre,"trou_10")
;ferme_win(#Fenetre,"test")
Procedure ferme_win(num_fenetre,type.s)
    WindowID = WindowID (num_fenetre)
    ;UseWindow(num_fenetre)
    winx = WindowX (num_fenetre)
    winy = WindowY (num_fenetre)
    winhaut = WindowHeight (num_fenetre)
    winlarg = WindowWidth (num_fenetre)
    
    Select type.s
        ;la fenetre retreci la largeur
        Case "larg"
            For cont=winlarg To 1 Step -2
                ResizeWindow (num_fenetre,-1,-1,cont, winhaut)
            Next cont
            ; ------------------------------------------------------------------------------------------
            ;la fenetre retreci la hauteur
        Case "haut"
            For cont=winhaut To 1 Step -2
                ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
            Next cont
            ; ------------------------------------------------------------------------------------------
            
            ;la fenetre elactic
        Case "elast"
            For cont=winhaut To 1 Step -2
                ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
            Next cont
            For cont=1 To winhaut
                ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
            Next cont
            For cont=winhaut To 1 Step -2
                ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
            Next cont
            
            ; ------------------------------------------------------------------------------------------
        Case "elast2"
            ;la fenetre elactic2
            For p=1 To 2
                For cont=winhaut To 1 Step -2
                    ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
                Next cont
                For cont=1 To winhaut Step 2
                    ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
                Next cont
                
                For cont=winhaut To 1 Step -2
                    ResizeWindow (num_fenetre,-1,-1,winlarg,cont)
                Next cont
            Next p
            ; ------------------------------------------------------------------------------------------
            ;la fenetre part a gauche
        Case "go_gauche"
            ; un petit coup a droite
            For cont=winx To winx+100 Step 1
                ResizeWindow(num_fenetre,cont,winy,-1,-1)
            Next cont
            
            For cont=winx To 0 Step -2
                 ResizeWindow(num_fenetre,cont,winy,-1,-1)
            Next cont
            ; ------------------------------------------------------------------------------------------
            ;la fenetre part a droite
        Case "go_droite"
            ; un petit coup a gauche
            For cont=winx To winx-100 Step -1
                 ResizeWindow(num_fenetre,cont,winy,-1,-1)
            Next cont
            
            For cont=winx To 1024 Step 2
                 ResizeWindow(num_fenetre,cont,winy,-1,-1)
            Next cont
            ; ------------------------------------------------------------------------------------------
            ;la fenetre part en bas
        Case "go_bas"
            For cont=winy To 800 Step 1
                 ResizeWindow(num_fenetre,-1,cont,-1,-1)
            Next cont
            ; ------------------------------------------------------------------------------------------
            ;la fenetre part en haut
        Case "go_haut"
            For cont=winy To 0 Step -2
                ResizeWindow(num_fenetre,-1,cont,-1,-1)
            Next cont
            ; ------------------------------------------------------------------------------------------
        Case "trou_1"
            For i=0 To WindowHeight (num_fenetre) Step 4
                Region1 = CreateRectRgn_ (0, 0, WindowWidth (num_fenetre), WindowHeight (num_fenetre)) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (0, 0,i,i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_DIFF ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_2"
            For i= WindowHeight (num_fenetre) To 0 Step -6
                Region1 = CreateRectRgn_ (0, 0, WindowWidth (num_fenetre), WindowHeight (num_fenetre)) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_XOR ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_3"
            For i= WindowHeight (num_fenetre) To 0 Step -4
                Region1 = CreateRectRgn_ (0, 0, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_XOR ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_4"
            For i= WindowHeight (num_fenetre) To 0 Step -4
                Region1 = CreateRectRgn_ (0, 0, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_DIFF ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_5"
            For i= WindowHeight (num_fenetre) To 0 Step -4
                Region1 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre), WindowHeight (num_fenetre)) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_XOR ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_6"
            For i= WindowHeight (num_fenetre) To 0 Step -4
                Region1 = CreateRectRgn_ (i, i, WindowWidth (num_fenetre), WindowHeight (num_fenetre)) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (-i, -i, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_XOR ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1)
                DeleteObject_ (Region1) ; On supprime les régions
                DeleteObject_ (Region2)
            Next i
        Case "trou_7"
            For i= WindowHeight (num_fenetre) To 0 Step -4
                x1= Random ( WindowWidth (num_fenetre))
                y1= Random ( WindowHeight (num_fenetre))
                Region1 = CreateRectRgn_ (x1,y1, WindowWidth (num_fenetre), WindowHeight (num_fenetre)) ; Création d'une région en rectangle
                Region2 = CreateRectRgn_ (x1, y1, WindowWidth (num_fenetre)-i, WindowHeight (num_fenetre)-i) ; Création d'une région en rectangle
                CombineRgn_ (Region1, Region1, Region2, #RGN_XOR ) ; On combine les 2 régions
                SetWindowRgn_ ( WindowID (num_fenetre), Region1, #True ) ; On applique la région finale
                Delay (1) 
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "trou_8"   
            For i= 0 To  WindowWidth(num_fenetre) Step 6
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region2 = CreateEllipticRgn_(-i,-i, i,i) ; Création de la région pour faire une fenêtre elliptique
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions 
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(5)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "trou_9"  
            For i= 0 To WindowWidth(num_fenetre)  Step 2
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region2 = CreateEllipticRgn_( WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i, i,i) ; Création de la région pour faire une fenêtre elliptique
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "trou_10" 
            For i= 0 To WindowWidth(num_fenetre)/2  Step 6
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region1 = CreateRectRgn_(WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i, i,i) ; Création d'une région en rectangle  
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale  
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
    EndSelect
    CloseWindow(num_fenetre)
    
EndProcedure 
; #Fenetre, 50, 50, 200, 200, #PB_Window_SystemMenu , "hello"
Procedure ouvre_win(num_fenetre,x,y,larg,haut,Options,titre$,type.s) 
    winx = x
    winy = y
    winhaut =haut 
    winlarg =larg
    OpenWindow(num_fenetre, x, y, winlarg , winhaut, titre$,Options )
    Select type.s
        
        Case "apparait_1"  
            For i=WindowHeight(num_fenetre)  To 0 Step -32
                Region1 = CreateRectRgn_(0, 0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region2 = CreateRectRgn_(0, 0,i,i) ; Création d'une région en rectangle 
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(100)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
            
        Case "apparait_bas_droite"  
            For i=WindowHeight(num_fenetre)  To 0 Step -6
                Region1 = CreateRectRgn_(0, 0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region2 = CreateRectRgn_(i, i,WindowWidth(num_fenetre),WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                CombineRgn_(Region1, Region1, Region2, #RGN_AND) ; On combine les 2 régions  
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(1)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i 
        Case "apparait_droite"  
            For i=WindowHeight(num_fenetre)  To 0 Step -6
                Region1 = CreateRectRgn_(0, 0, WindowWidth(num_fenetre)+i, WindowHeight(num_fenetre)+i) ; Création d'une région en rectangle 
                Region2 = CreateRectRgn_(i, -i,WindowWidth(num_fenetre)+i,WindowHeight(num_fenetre)+i) ; Création d'une région en rectangle 
                CombineRgn_(Region1, Region1, Region2,  #RGN_AND) ; On combine les 2 régions  
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(1)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "apparait_bas"  
            For i=WindowHeight(num_fenetre)  To 0 Step -6
                Region1 = CreateRectRgn_(0, 0, WindowWidth(num_fenetre)+i, WindowHeight(num_fenetre)+i) ; Création d'une région en rectangle 
                Region2 = CreateRectRgn_(-i, i,WindowWidth(num_fenetre)+i,WindowHeight(num_fenetre)+i) ; Création d'une région en rectangle 
                CombineRgn_(Region1, Region1, Region2,  #RGN_AND) ; On combine les 2 régions  
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(1)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case"apparait_trou"   
            For i= WindowWidth(num_fenetre) To  0 Step-6 
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                Region2 = CreateEllipticRgn_(-i,-i, i,i) ; Création de la région pour faire une fenêtre elliptique
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale 
                Delay(5)
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "apparait_trou_2"   
            For i= 0 To WindowWidth(num_fenetre)/2  Step 2
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle 
                
                Region2 = CreateEllipticRgn_(WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i, i, i) ; Création de la région pour faire une fenêtre elliptique
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale  
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "apparait_trou_3"    
            For i= 0 To WindowWidth(num_fenetre)/2  Step 2
                Region1 = CreateRectRgn_(0,0, WindowWidth(num_fenetre), WindowHeight(num_fenetre)) ; Création d'une région en rectangle  
                Region2 = CreateRectRgn_(WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i, i, i) ; Création d'une région en rectangle   
                CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions  
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale  
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i 
        Case "apparait_trou_4" 
            For i=  0 To WindowWidth(num_fenetre)  Step 6 
                Region1 = CreateRectRgn_(WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i, i,i) ; Création d'une région en rectangle   
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale  
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
        Case "apparait_trou_5" 
            
            For i=  WindowWidth(num_fenetre)/4  To 0 Step  -4 
                Region1 = CreateRectRgn_(WindowWidth(num_fenetre)-i,WindowHeight(num_fenetre)-i,i,i) ; Création d'une région en rectangle   
                Delay(1)
                SetWindowRgn_(WindowID(num_fenetre), Region1, #True) ; On applique la région finale  
                DeleteObject_(Region1) ; On supprime les régions
                DeleteObject_(Region2) 
            Next i
    EndSelect
    OpenWindow(num_fenetre, x, y, winlarg , winhaut, titre$,Options  )
    
    
    
EndProcedure