api windows

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

api windows

Message par venom »

bonjour,

bon voila j'ai une question bête mais bon :oops: .

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 :oops: . désolé de la question mais y a t'il un lien vers touts les api qui expliquerais leurs fonctions svp ???

merci


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Voici la doc : ICI

Elle regroupe la totalité des fonctions.

Pour utiliser une fonction API, c'est fonction_('paramètre(s)'), il faut rajouter un '_' juste avant la première parenthèse.
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

bin ecoute je te remercie dorian je vais donc voir pour utilisé les apis .

Mais est-ce que sa sert beaucoup ? car je voie plein de code fait avec des apis mais forcement je ne connais pas leurs fonction :) .


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Oui sa sert beaucoup, elles permettent par exemple de rendre des fenêtres transparentes, les arrondir ...

Mais bon dans ce domaine, il vaut mieux que quelqu'un de plus expérimenté te réponde car j'évite de les utiliser (trop compliqué pour moi ^^)
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

:lol: ok merci de toute façon je ne vais pas commencé par arrondir des fenetres ou autres je vais deja essaié d'apprendre sa sera déja pas mal :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

8) comment c'est bien les api's j'ai fait un petit code surement bête pour certain mais je n' aurais meme pas imaginer faire ces effects la un jours. :D .

bref voici le code si sa peut interressé :?

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
voila :D
encore merci


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Merci venom, sympa ton code, t'apprends vite :o !!!
Si tu peux y ajouter une option pour ajuster la vitesse de l'effet, je suis preneur aussi :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

he les gars , vous etes gentils, ça deja ete fait !!
ce Code :lol:

j'en ai mem fait un de perso sans les api !! :lol: :D

ça c'etais ma premiere version !






;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



ça c'etais la version du Soldat inconnu d'apres mon code



;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

Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

Si tu peux y ajouter une option pour ajuster la vitesse de l'effet, je suis preneur aussi
y'a qu'a demandé :wink:

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

he les gars , vous etes gentils, ça deja ete fait !!
ce Code

j'en ai mem fait un de perso sans les api !!
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 servir



@++
Dernière modification par venom le jeu. 04/janv./2007 1:13, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

et voici ma derniere version mis en purebasic 4.00 :D

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 
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

venom a écrit : 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
j'ai récupéré ton code pour le Forum de Secour :D
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

:D ouai si tu veut y'a pas de probleme :wink:

je peut meme le commenté si sa peut servir d'avantage.

ps: qu'est-ce que le Forum de Secour stp ???


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Merci pour vos codes :D
venom a écrit :ps: qu'est-ce que le Forum de Secour stp ???
C'est le Forum de Dobro
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

de rien,

merci pour le lien :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre