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 !! :-) ..... comme toujours ! :-D )
; 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 ***********
; *******************************
; 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(#Fenetre,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")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","viens_de_droite")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","viens_de_gauche")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","viens_du_haut")
;ouvre_win(#Fenetre,321, 217, 257, 200,#PB_Window_SystemMenu,"hello","viens_du_bas")
; ************************************************************************************************
; *******************************************
; **** 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 !
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 ?
; 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)
;SetActiveWindow(num_fenetre)
winx = WindowX(num_fenetre)
winy = WindowY(num_fenetre)
winhaut = WindowHeight(num_fenetre)
winlarg = WindowWidth(num_fenetre)
ExamineDesktops()
hauteur_ecran = DesktopHeight(0)
largeur_ecran = DesktopWidth(0)
Select type.s
;la fenetre retreci la largeur
Case "larg"
For cont=winlarg To 1 Step -2
ResizeWindow(num_fenetre,#PB_Ignore, winhaut,cont,#PB_Ignore)
Next cont
; ------------------------------------------------------------------------------------------
;la fenetre retreci la hauteur
Case "haut"
For cont=winhaut To 1 Step -2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,#PB_Ignore,cont)
Delay(1)
Next cont
; ------------------------------------------------------------------------------------------
;la fenetre elactic
Case "elast"
For cont=winhaut To 1 Step -2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,#PB_Ignore,cont)
Next cont
For cont=1 To winhaut
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,#PB_Ignore,cont)
Next cont
For cont=winhaut To 1 Step -2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,#PB_Ignore,cont)
Next cont
; ------------------------------------------------------------------------------------------
Case "elast2"
;la fenetre elactic2
For p=1 To 2
For cont=winhaut To 1 Step -2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,cont,cont)
Next cont
For cont=1 To winhaut Step 2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,cont,cont)
Next cont
For cont=winhaut To 1 Step -2
ResizeWindow(num_fenetre,winlarg,#PB_Ignore,cont,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,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Next cont
For cont=winx To 0-winlarg Step -2
ResizeWindow(num_fenetre,cont,#PB_Ignore,#PB_Ignore,#PB_Ignore)
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,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Next cont
For cont=winx-100 To largeur_ecran Step 2
ResizeWindow(num_fenetre,cont,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Next cont
; ------------------------------------------------------------------------------------------
;la fenetre part en bas
Case "go_bas"
For cont=winy To hauteur_ecran Step 1
ResizeWindow(num_fenetre,#PB_Ignore,cont,#PB_Ignore,#PB_Ignore)
Next cont
; ------------------------------------------------------------------------------------------
;la fenetre part en haut
Case "go_haut"
For cont=winy To 0-winhaut Step -1
ResizeWindow(num_fenetre,#PB_Ignore,cont, #PB_Ignore, #PB_Ignore)
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
ExamineDesktops()
hauteur_ecran = DesktopHeight(0)
largeur_ecran = DesktopWidth(0)
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
Case "viens_de_droite"
For cont=largeur_ecran To largeur_ecran /2 Step-1
ResizeWindow(num_fenetre,cont,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Next cont
Case "viens_de_gauche"
For cont=0-winlarg To largeur_ecran /2
ResizeWindow(num_fenetre,cont,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Next cont
Case "viens_du_haut"
For cont=0 To hauteur_ecran /2
ResizeWindow(num_fenetre,#PB_Ignore,cont,#PB_Ignore,#PB_Ignore)
Next cont
Case "viens_du_bas"
For cont=hauteur_ecran To hauteur_ecran /2 Step-2
ResizeWindow(num_fenetre,#PB_Ignore,cont,#PB_Ignore,#PB_Ignore)
Next cont
EndSelect
OpenWindow(num_fenetre, x, Y, winlarg , winhaut,titre$, Options )
EndProcedure