Re: J'ai des Boutons
Publié : jeu. 01/oct./2009 18:08
dans cet exemple , tu verra qu'il est facile de faire une fenetre de la forme que tu veux , c'est une code qui avait ete fait par le Soldat inconnu , mais qui te donne deja une base
une fois que tu as décider de la forme de ta fenetre de base tu vas pouvoir déssiner ce que tu veux dedans (librairie 2DDrawing intergé a Purebasic )
je te poste un petit exemple de dessin ...
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Donner à une fenêtre une forme spécifique. Par exemple faire une fenêtre ronde ou triangulaire.
Declare Forme(win)
Enumeration
#Quitter
#Forme1
#Forme2
#Forme3
#Forme4
#Forme5
EndEnumeration
Global win=0
; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 400, 400, "Test",#PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(win)) = 0
End
EndIf
; Création des boutons et de l'option d'affichage
ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter")
OptionGadget(#Forme1, 100, 125, 200, 15, "Angles arrondis")
OptionGadget(#Forme2, 100, 140, 200, 15, "Ronde")
OptionGadget(#Forme3, 100, 155, 200, 15, "Triangle")
OptionGadget(#Forme4, 100, 170, 200, 15, "Trouée")
OptionGadget(#Forme5, 100, 185, 200, 15, "Triangle + Rond")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget() ; boutons, zone de texte, ...
Case #Quitter
Event = #PB_Event_CloseWindow ; On quitte
Default
Forme(win) ; sinon, on change la forme de la fenêtre
EndSelect
EndIf
Until Event =#PB_Event_CloseWindow
End
; zone procedure
Procedure Forme(win)
If GetGadgetState(#Forme1) ; si on a choisi la forme 1
Region = CreateRoundRectRgn_(0, 0, WindowWidth(win), WindowHeight(win), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis
; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region
SetWindowRgn_(WindowID(win), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
ElseIf GetGadgetState(#Forme2) ; si on a choisi la forme 2
Region = CreateEllipticRgn_(0, 0, WindowWidth(win), WindowHeight(win)) ; Création de la région pour faire une fenêtre elliptique
; CreateEllipticRgn_(X1, Y1, X2, Y2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
SetWindowRgn_(WindowID(win), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
ElseIf GetGadgetState(#Forme3) ; si on a choisi la forme 3
Region = CreatePolygonRgn_(?Triangle, 4, #Alternate) ; Création de la région pour faire une fenêtre elliptique
; CreateRoundRectRgn_(Array, NbPoints, Type)
; Array : Adresse de la liste ou de la Data
; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point)
; Type : Voir msdn
SetWindowRgn_(WindowID(win), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
ElseIf GetGadgetState(#Forme4) ; si on a choisi la forme 4
Region1 = CreateRectRgn_(0, 0, WindowWidth(win), WindowHeight(win)) ; Création d'une région en rectangle
Region2 = CreateRectRgn_(10, 10, WindowWidth(win) - 10, 50) ; Création d'une région en rectangle
; CreateRectRgn_(X1, Y1, X2, Y2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions
; Les modes suivants sont disponibles :
; #RGN_AND : Intersection
; #RGN_OR : Union
; #RGN_DIFF : Différences
; #RGN_XOR : Union moins les intersections
SetWindowRgn_(WindowID(win), Region1, #True) ; On applique la région finale
DeleteObject_(Region1) ; On supprime les régions
DeleteObject_(Region2)
ElseIf GetGadgetState(#Forme5) ; si on a choisi la forme 5
Region1 = CreatePolygonRgn_(?Triangle, 4, #Alternate)
Region2 = CreateEllipticRgn_(0, 0, WindowWidth(win), WindowHeight(win))
CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
SetWindowRgn_(WindowID(win), Region1, #True) ; On applique la région finale
DeleteObject_(Region1) ; On supprime les régions
DeleteObject_(Region2)
EndIf
DataSection
Triangle :
Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle
EndDataSection
EndProcedure
une fois que tu as décider de la forme de ta fenetre de base tu vas pouvoir déssiner ce que tu veux dedans (librairie 2DDrawing intergé a Purebasic )
je te poste un petit exemple de dessin ...
