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$)); centreoui 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 ???