bon voila j'ai une question bête mais bon

sa fait a peut pres 3 ans que je suis sur ce forum et je n'est toujour pas compris comment vous trouver et utiliser les fonctions api

merci
@++
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
Enumeration
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#Button_5
#Button_6
#Button_7
#Button_8
#Button_9
EndEnumeration
Procedure AnimationClose(Fenetre, Effet, Duree)
AnimateWindow_(WindowID(Fenetre), Duree, Effet | #AW_HIDE)
EndProcedure
If OpenWindow(#Window_0, 216, 0, 440, 140, "Api's test fermeture", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 20, 20, 100, 30, "gauche a droite")
ButtonGadget(#Button_1, 120, 20, 100, 30, "droite a gauche")
ButtonGadget(#Button_2, 220, 20, 100, 30, "bas vers haut")
ButtonGadget(#Button_3, 320, 20, 100, 30, "haut vers bas")
ButtonGadget(#Button_4, 20, 50, 100, 30, "bas G haut D")
ButtonGadget(#Button_5, 120, 50, 100, 30, "bas D haut G")
ButtonGadget(#Button_6, 220, 50, 100, 30, "haut G bas D")
ButtonGadget(#Button_7, 320, 50, 100, 30, "haut D bas G")
ButtonGadget(#Button_8, 120, 80, 100, 30, "centre")
ButtonGadget(#Button_9, 220, 80, 100, 30, "fondu")
EndIf
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_0
AnimationClose(#Window_0, #AW_HOR_POSITIVE, 500) ; gauche a droite
End
Case #Button_1
AnimationClose(#Window_0, #AW_HOR_NEGATIVE, 500) ; droite a gauche
End
Case #Button_2
AnimationClose(#Window_0, #AW_VER_NEGATIVE, 500) ; bas vers haut
End
Case #Button_3
AnimationClose(#Window_0, #AW_VER_POSITIVE, 500) ; haut vers bas
End
Case #Button_4
AnimationClose(#Window_0, #AW_HOR_POSITIVE|#AW_VER_NEGATIVE, 500) ; bas G haut D
End
Case #Button_5
AnimationClose(#Window_0, #AW_HOR_NEGATIVE|#AW_VER_NEGATIVE, 500) ; bas D haut G
End
Case #Button_6
AnimationClose(#Window_0, #AW_VER_POSITIVE|#AW_HOR_POSITIVE, 500) ; haut G bas D
End
Case #Button_7
AnimationClose(#Window_0, #AW_HOR_NEGATIVE|#AW_VER_POSITIVE, 500) ; haut D bas G
End
Case #Button_8
AnimationClose(#Window_0, #AW_CENTER, 500) ; centre
End
Case #Button_9
AnimationClose(#Window_0, #AW_BLEND, 2500) ; fondu
End
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
AnimationClose(#Window_0, #AW_CENTER, 500); centre
;code Dobro
; purebasic V4.00
Declare winfx(type.s)
#window =1
; on ouvre une fenetre
WindowID = OpenWindow (1, 50, 50, 200, 200, "hello" , #PB_Window_SystemMenu )
WindowID = WindowID ( #window )
Repeat
Event= WaitWindowEvent ()
Until Event= #PB_Event_CloseWindow
; *******************************
; ici on appel la fonction qui fait partir la fenetre
;winfx("larg")
;winfx("haut")
;winfx("elast")
;winfx("elast2")
;winfx("go_gauche")
winfx( "go_droite" )
;winfx("go_haut")
;winfx("go_bas")
Procedure winfx(type.s)
If vitesse<1
vitesse=1
EndIf
If vitesse>2
vitesse=2
EndIf
winx = WindowX ( #window )
winy = WindowY ( #window )
winhaut = WindowHeight ( #window )
winlarg = WindowWidth ( #window )
;la fenetre retreci la largeur
If type.s = "larg"
For cont=winlarg To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , cont, winhaut)
Next cont
EndIf
;la fenetre retreci la hauteur
If type.s = "haut"
For cont=winhaut To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
Next cont
EndIf
;la fenetre elactic
If type.s = "elast"
For cont=winhaut To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
UpdateWindow_ ( WindowID ( #window ))
Delay (1)
Next cont
For cont=1 To winhaut
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
UpdateWindow_ ( WindowID ( #window ))
Delay (1)
Next cont
For cont=winhaut To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
UpdateWindow_ ( WindowID ( #window ))
Delay (1)
Next cont
EndIf
;la fenetre elactic2
For p=1 To 2
If type.s = "elast2"
For cont=winhaut To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
Delay (1)
Next cont
For cont=1 To winhaut Step 2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
Delay (1)
Next cont
For cont=winhaut To 1 Step -2
ResizeWindow ( #window , #PB_Ignore , #PB_Ignore , winlarg,cont)
Delay (1)
Next cont
EndIf
Next p
;la fenetre part a gauche
If type.s = "go_gauche"
; un petit coup a droite
For cont=winx To winx+100 Step 1
ResizeWindow ( #window , cont,winy , #PB_Ignore , #PB_Ignore )
Next cont
For cont=winx To 0 Step -2
ResizeWindow ( #window , cont,winy , #PB_Ignore , #PB_Ignore )
Next cont
EndIf
;la fenetre part a droite
If type.s = "go_droite"
; un petit coup a gauche
For cont=winx To winx-100 Step -1
ResizeWindow ( #window , cont,winy , #PB_Ignore , #PB_Ignore )
Next cont
For cont=winx To 1024 Step 2
ResizeWindow ( #window , cont,winy , #PB_Ignore , #PB_Ignore )
Next cont
EndIf
;la fenetre part en bas
If type.s = "go_bas"
For cont=winy To 800 Step 1
ResizeWindow ( #window , winx,cont , #PB_Ignore , #PB_Ignore )
Next cont
EndIf
;la fenetre part en haut
If type.s = "go_haut"
For cont=winy To 0 Step -2
ResizeWindow ( #window , winx,cont , #PB_Ignore , #PB_Ignore )
Next cont
EndIf
EndProcedure
;prg realisé par le soldat inconnu
; sur une idée de Dobro
; Version purebasic 4.00
Global AW_Taille_Ecran_X.l, AW_Taille_Ecran_Y.l, AW_Taille_Fen_X.l, AW_Taille_Fen_Y.l
Enumeration
#AnimateWindow_Image
#AnimateWindow_Image2
#AnimateWindow
EndEnumeration
Procedure Haut( )
Y = WindowY ( #AnimateWindow )
For n = 1 To 25
ResizeWindow ( #AnimateWindow , #PB_Ignore , Y - Int ((1.5 * Pow (n / 25, 2) - 0.02 * n) * AW_Taille_Ecran_Y), #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Droite( )
X = WindowX ( #AnimateWindow )
For n = 1 To 25
ResizeWindow ( #AnimateWindow , X + Int ((1.5 * Pow (n / 25, 2) - 0.02 * n) * AW_Taille_Ecran_X), #PB_Ignore , #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Bas()
Y = WindowY ( #AnimateWindow )
For n = 1 To 25
ResizeWindow ( #AnimateWindow , #PB_Ignore ,Y + Int ((1.5 * Pow (n / 25, 2) - 0.02 * n) * AW_Taille_Ecran_Y), #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Gauche()
X = WindowX ( #AnimateWindow )
For n = 1 To 25
ResizeWindow ( #AnimateWindow , X - Int ((1.5 * Pow (n / 25, 2) - 0.02 * n) * AW_Taille_Ecran_X), #PB_Ignore , #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Fermeture_H( )
X = WindowX ( #AnimateWindow )
Y = WindowY ( #AnimateWindow )
For n = 1 To 24
ResizeWindow ( #AnimateWindow , X + AW_Taille_Fen_X * n / 48, #PB_Ignore , AW_Taille_Fen_X - AW_Taille_Fen_X * n / 24, AW_Taille_Fen_Y)
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Fermeture_V( )
X = WindowX ( #AnimateWindow )
Y = WindowY ( #AnimateWindow )
For n = 1 To 24
ResizeWindow ( #AnimateWindow , #PB_Ignore , Y + AW_Taille_Fen_Y * n / 48, AW_Taille_Fen_X, AW_Taille_Fen_Y - AW_Taille_Fen_Y * n / 24)
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Fermeture_T()
X = WindowX ( #AnimateWindow )
Y = WindowY ( #AnimateWindow )
For n = 1 To 24
ResizeWindow ( #AnimateWindow , X + AW_Taille_Fen_X * n / 48, Y + AW_Taille_Fen_Y * n / 48, AW_Taille_Fen_X - AW_Taille_Fen_X * n / 24, AW_Taille_Fen_Y - AW_Taille_Fen_Y * n / 24)
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Interieur( )
For n = 20 To 1 Step - 1
Region1 = CreateRectRgn_ (0, 0, AW_Taille_Fen_X, AW_Taille_Fen_Y)
Region2 = CreateRectRgn_ (AW_Taille_Fen_X * n / 40, AW_Taille_Fen_Y * n / 40, AW_Taille_Fen_X - AW_Taille_Fen_X * n / 40, AW_Taille_Fen_Y - AW_Taille_Fen_Y * n / 40)
CombineRgn_ (Region1, Region1, Region2, #RGN_DIFF )
SetWindowRgn_ ( WindowID ( #AnimateWindow ), Region1, #True )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
DeleteObject_ (Region1)
DeleteObject_ (Region2)
Next
EndProcedure
Procedure Saut( )
; taille de la zone de l'écran utilisable (sans la barre des taches)
SystemParametersInfo_ ( #SPI_GETWORKAREA , 0, @Taille_Ecran.RECT, 0)
; la fenêtre tombe
Y = WindowY ( #AnimateWindow )
Chute = Taille_Ecran\bottom - Y - AW_Taille_Fen_Y
Pas = Pow (Chute * 600 / AW_Taille_Ecran_Y, 0.5)
For n = 1 To Pas
;MoveWindow(WindowX( #AnimateWindow), Y + Chute * n / Pas)
ResizeWindow ( #AnimateWindow , #PB_Ignore ,Y + Chute * n / Pas, #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
; la fenêtre fait un premier bond
Pas = Pas * 1.5
Chute = Chute * 0.4
Y = WindowY ( #AnimateWindow )
X = WindowX ( #AnimateWindow )
For n = 1 To Pas * 2
;MoveWindow(X + Chute * n / Pas, Y - Int((n / Pas - Pow(n / Pas, 2)) * Chute * 4))
ResizeWindow ( #AnimateWindow , X + Chute * n / Pas, Y - Int ((n / Pas - Pow (n / Pas, 2)) * Chute * 4), #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
Delay (1)
Next
EndProcedure
Procedure Explose()
; taille et position de la fenêtre
GetWindowRect_ ( WindowID ( #AnimateWindow ), Fen.RECT)
For n = 1 To 3
OpenWindow ( #AnimateWindow + n, Fen\left, Fen\top, AW_Taille_Fen_X, AW_Taille_Fen_Y, "" , #PB_Window_BorderLess | #PB_Window_Invisible )
SetWindowLong_ ( WindowID ( #AnimateWindow + n), #GWL_EXSTYLE , GetWindowLong_ ( WindowID ( #AnimateWindow + n), #GWL_EXSTYLE ) | #WS_EX_TOOLWINDOW ) ; choix de la barre d'outil réduite
If CreateGadgetList ( WindowID ( #AnimateWindow + n))
ImageGadget (n, 0, 0, AW_Taille_Fen_X, AW_Taille_Fen_Y, ImageID ( #AnimateWindow_Image ))
EndIf
ShowWindow_ ( WindowID ( #AnimateWindow + n), #SW_SHOW )
Next
; on applique les masques au fenêtre
Region0 = CreateRectRgn_ (0, 0, AW_Taille_Fen_X / 2, AW_Taille_Fen_Y / 2)
SetWindowRgn_ ( WindowID ( #AnimateWindow ), Region0, #True )
Region1 = CreateRectRgn_ (AW_Taille_Fen_X, 0, AW_Taille_Fen_X / 2, AW_Taille_Fen_Y / 2)
SetWindowRgn_ ( WindowID ( #AnimateWindow + 1), Region1, #True )
Region2 = CreateRectRgn_ (AW_Taille_Fen_X, AW_Taille_Fen_Y, AW_Taille_Fen_X / 2, AW_Taille_Fen_Y / 2)
SetWindowRgn_ ( WindowID ( #AnimateWindow + 2), Region2, #True )
Region3 = CreateRectRgn_ (0, AW_Taille_Fen_Y, AW_Taille_Fen_X / 2, AW_Taille_Fen_Y / 2)
SetWindowRgn_ ( WindowID ( #AnimateWindow + 3), Region3, #True )
DeleteObject_ (Region0)
DeleteObject_ (Region1)
DeleteObject_ (Region2)
DeleteObject_ (Region3)
; on écarte les morceaux
X = WindowX ( #AnimateWindow )
Y = WindowY ( #AnimateWindow )
For n = 1 To 30
Coef.f = Pow (n, 2) / 900
ResizeWindow ( #AnimateWindow , X - AW_Taille_Ecran_X * Coef, Y - AW_Taille_Ecran_Y * Coef, #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow ))
ResizeWindow ( #AnimateWindow , X + AW_Taille_Ecran_X * Coef, Y - AW_Taille_Ecran_Y * Coef, #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow + 1))
ResizeWindow ( #AnimateWindow , X + AW_Taille_Ecran_X * Coef, Y + AW_Taille_Ecran_Y * Coef, #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow + 2))
ResizeWindow ( #AnimateWindow , X - AW_Taille_Ecran_X * Coef, Y + AW_Taille_Ecran_Y * Coef, #PB_Ignore , #PB_Ignore )
UpdateWindow_ ( WindowID ( #AnimateWindow + 3))
Delay (1)
Next
EndProcedure
Procedure.l Capture(WindowID.l)
; Cette procedure permet de créer une nouvelle fenêtre représentant la fenêtre à animée
; taille et position de la fenêtre
GetWindowRect_ ( WindowID , Fen.RECT)
AW_Taille_Fen_X = Fen\right - Fen\left
AW_Taille_Fen_Y = Fen\bottom - Fen\top
; on fait une impression d'acran
DC = GetDC_ (0)
CreateImage ( #AnimateWindow_Image , AW_Taille_Fen_X, AW_Taille_Fen_Y)
Dessin = StartDrawing ( ImageOutput ( #AnimateWindow_Image ))
BitBlt_ (Dessin, 0, 0, AW_Taille_Fen_X, AW_Taille_Fen_Y, DC, Fen\left, Fen\top, #SRCCOPY )
StopDrawing ()
ReleaseDC_ (0, DC)
; on créé la nouvelle fenêtre
OpenWindow ( #AnimateWindow , Fen\left, Fen\top, AW_Taille_Fen_X, AW_Taille_Fen_Y, "" , #PB_Window_BorderLess | #PB_Window_Invisible )
SetWindowLong_ ( WindowID ( #AnimateWindow ), #GWL_EXSTYLE , GetWindowLong_ ( WindowID ( #AnimateWindow ), #GWL_EXSTYLE ) | #WS_EX_TOOLWINDOW ) ; choix de la barre d'outil réduite
If CreateGadgetList ( WindowID ( #AnimateWindow + num))
ImageGadget (0, 0, 0, AW_Taille_Fen_X, AW_Taille_Fen_Y, ImageID ( #AnimateWindow_Image ))
EndIf
ShowWindow_ ( WindowID ( #AnimateWindow ), #SW_SHOW ) ; montre la fenêtre
ProcedureReturn WindowID ( #AnimateWindow )
EndProcedure
ProcedureDLL AnimateWindow(Window.l, Type.l) ; Animer la fermeture de la fenêtre
; Cette fonction permet d'animer la fermeture de la fenêtre
; Window : numéro de la fenêtre
; Type : numéro de l'animation, Type peut prendre les valeur suivante
; 0 = la fenêtre se sauve par le haut de l'écran
; 1 = la fenêtre se sauve par la droite de l'écran
; 2 = la fenêtre se sauve par le bas de l'écran
; 3 = la fenêtre se sauve par la gauche de l'écran
; 4 = fermeture de la fenêtre horizontalement
; 5 = fermeture de la fenêtre verticalement
; 6 = fermeture de la fenêtre horizonatlement et verticalement
; 7 = la fenêtre disparait de l'intérieur
; 8 = la fenêtre quitte l'écran en faisant des bonds sur le bas de l'écran
; 9 = on explose la fenêtre en 4 partie
Capture( WindowID (Window))
; on ferme l'ancienne fenêtre
CloseWindow (Window)
; on récupère la taille de l'écran
AW_Taille_Ecran_X = GetSystemMetrics_ ( #SM_CXSCREEN )
AW_Taille_Ecran_Y = GetSystemMetrics_ ( #SM_CYSCREEN )
; on anime la nouvelle fenêtre
Select Type
Case 0
Haut()
Case 1
Droite()
Case 2
Bas()
Case 3
Gauche()
Case 4
Fermeture_H()
Case 5
Fermeture_V()
Case 6
Fermeture_T()
Case 7
Interieur()
Case 8
Saut()
Case 9
Explose()
EndSelect
EndProcedure
;- Test
OpenWindow (0, 200, 100, 300, 200, "Test" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget )
Repeat
Event = WaitWindowEvent ()
Until Event = #WM_CLOSE
AnimateWindow(0, 9)
End
y'a qu'a demandéSi tu peux y ajouter une option pour ajuster la vitesse de l'effet, je suis preneur aussi
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
Enumeration
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#Button_5
#Button_6
#Button_7
#Button_8
#Button_9
#_StringGadget0
#Text_0
EndEnumeration
Procedure AnimationClose(Fenetre, Effet, Duree)
AnimateWindow_(WindowID(Fenetre), Duree, Effet | #AW_HIDE)
EndProcedure
If OpenWindow(#Window_0, 216, 0, 440, 140, "Api's test fermeture", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 20, 20, 100, 30, "gauche a droite")
ButtonGadget(#Button_1, 120, 20, 100, 30, "droite a gauche")
ButtonGadget(#Button_2, 220, 20, 100, 30, "bas vers haut")
ButtonGadget(#Button_3, 320, 20, 100, 30, "haut vers bas")
ButtonGadget(#Button_4, 20, 50, 100, 30, "bas G haut D")
ButtonGadget(#Button_5, 120, 50, 100, 30, "bas D haut G")
ButtonGadget(#Button_6, 220, 50, 100, 30, "haut G bas D")
ButtonGadget(#Button_7, 320, 50, 100, 30, "haut D bas G")
ButtonGadget(#Button_8, 120, 80, 100, 30, "centre")
ButtonGadget(#Button_9, 220, 80, 100, 30, "fondu")
StringGadget(#_StringGadget0, 170, 115, 100, 20, Chaine$)
TextGadget(#Text_0, 20, 117,250,20,"entrée votre durée ici en mS:")
EndIf
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_0
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_HOR_POSITIVE, Val(Chaine$)) ; gauche a droite
End
Case #Button_1
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_HOR_NEGATIVE, Val(Chaine$)) ; droite a gauche
End
Case #Button_2
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_VER_NEGATIVE, Val(Chaine$)) ; bas vers haut
End
Case #Button_3
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_VER_POSITIVE, Val(Chaine$)) ; haut vers bas
End
Case #Button_4
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_HOR_POSITIVE|#AW_VER_NEGATIVE, Val(Chaine$)) ; bas G haut D
End
Case #Button_5
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_HOR_NEGATIVE|#AW_VER_NEGATIVE, Val(Chaine$)) ; bas D haut G
End
Case #Button_6
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_VER_POSITIVE|#AW_HOR_POSITIVE, Val(Chaine$)) ; haut G bas D
End
Case #Button_7
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_HOR_NEGATIVE|#AW_VER_POSITIVE, Val(Chaine$)) ; haut D bas G
End
Case #Button_8
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_CENTER, Val(Chaine$)) ; centre
End
Case #Button_9
Chaine$ = GetGadgetText(#_StringGadget0)
AnimationClose(#Window_0, #AW_BLEND, Val(Chaine$)) ; fondu
End
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
AnimationClose(#Window_0, #AW_CENTER, Val(Chaine$)); centre
oui dobro je sais que sa existe deja mais comme j'ai dit au debu de mon post j'apprend a utilisé les api's donc je ne vais pas pondre un code de malade même si ce code sert pas a grand chose je prefert posteé au cas ou sa pourrait servirhe les gars , vous etes gentils, ça deja ete fait !!
ce Code
j'en ai mem fait un de perso sans les api !!
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
C'est le Forum de Dobrovenom a écrit :ps: qu'est-ce que le Forum de Secour stp ???