Page 1 sur 1

MODULES énumérations publiques ou privées

Publié : mar. 21/juil./2015 9:57
par Micoute
Bonjour à tous,

je souhaite faire un module où il va y avoir plusieurs fenêtres et dans chaque fenêtres, il y aura des gadgets, mais je ne sais pas comment je pourrais faire mes énumérations !

Doivent-elles être dans l'espace public ou privé ?

Dois-je les mettre dans les 2 ?

Je vous remercie pour vos réponses

Exemple:

Code : Tout sélectionner

;Module géométrie

;Auteur : Micoute
;Date : 20 juillet 2015
;Version PB : 5.31 (x86)
;Démo : oui

EnableExplicit

DeclareModule Police
  Global FontID1
  Global FontID2
  Global FontID3
  Global FontID4
  
EndDeclareModule

DeclareModule Verification
  
  Declare checkFloatInput(gadget)
  
EndDeclareModule

;carré
DeclareModule Carre
  
  Enumeration Fenetre
    #Fenetre_Carre = 1
  EndEnumeration
  
  Enumeration Gadgets
    #Str_cote_carre
    #Str_Surface_carre
    #Str_Diagonale_carre
    #Str_perimetre_carre
    #Carre
  EndEnumeration
  
  Structure ObjetCarre
    ID.i
    Cote.d
    Surface.d
    Diagonale.d
    Perimetre.d
  EndStructure
  
  Global.ObjetCarre *Carre
  
  Declare Ouvrir_Fenetre_Carre()
  Declare CreerCarre(ID, Co.d)
  
EndDeclareModule
;cercle
DeclareModule Cercle
  
  Enumeration Fenetre
    #Fenetre_Cercle = 2
  EndEnumeration
  
  Enumeration Gadgets
    #Str_perimetre_cercle = 5
    #Str_Rayon_cercle
    #Str_Surface_Cercle
    #Str_Diametre_Cercle
    #Cercle
  EndEnumeration
  
  Structure ObjetCercle
    ID.i
    Rayon.d
    Diametre.d    
    Perimetre.d
    Surface.d
  EndStructure
  
  Global.ObjetCercle *Cercle
  
  Declare Ouvrir_Fenetre_Cercle()
  Declare CreerCercle(ID, Rayon.d)
  
EndDeclareModule
;rectangle
DeclareModule Rectangle
  
  Enumeration Fenetre
    #Fenetre_Rectangle = 3
  EndEnumeration
  
  Enumeration Gadgets
    #Str_perimetre_Rectangle = 10
    #Str_Largeur_Rectangle
    #Str_Longueur_Rectangle
    #Str_Surface_rectangle
    #Str_Diagonale_rectangle
    #Rectangle
  EndEnumeration
  
  Structure ObjetRectangle
    Id.i
    Longueur.d
    Largeur.d
    Perimetre.d
    Surface.d
    Diagonale.d
  EndStructure
  
  Global.ObjetRectangle *Rectangle
  
  Declare Ouvrir_Fenetre_Rectangle()
  Declare CreerRectangle(Id, Longueur.d, Largeur.d)
  
EndDeclareModule
;anneau
DeclareModule Anneau
  
  Enumeration Fenetre
    #Fenetre_Anneau = 4
  EndEnumeration
  
  Enumeration gadgets
    #Str_DE = 16
    #Str_DI
    #Str_DIn
    #Str_La
    #Str_SU
    #Anneau
  EndEnumeration
  
  Structure ObjetAnneau
    ID.i
    DiametreInterne.d
    DiametreExterne.d
    DiametreIntermediaire.d
    Largeur.d
    Surface.d
  EndStructure
  
  Global.ObjetAnneau *Anneau
  
  Declare Ouvrir_Fenetre_Anneau()
  Declare CreerAnneau(ID, Di.d, De.d)
  
EndDeclareModule
;triangle rectangle
DeclareModule TriangleRectangle
  
  Enumeration Fenetre
    #Fenetre_TriangleR = 5
  EndEnumeration
  Enumeration Gadgets
    #Str_Base_TR = 22
    #Str_Hauteur_TR
    #Str_Hypothenuse_TR
    #Str_Perimetre_TR
    #Str_Surface_TR
    #TriangleRectangle
  EndEnumeration
  
  Structure ObjetTriangleRectangle
    ID.i
    Base.d
    Hauteur.d
    Hypothenuse.d
    Perimetre.d
    Surface.d
  EndStructure
  
  Global.ObjetTriangleRectangle *TriangleRectangle
  
  Declare Ouvrir_Fenetre_TriangleRectangle()
  Declare CreerTriangleRectangle(Id, Base.d, Hauteur.d)
  
EndDeclareModule  
;losange
DeclareModule Losange
  
  Enumeration Fenetre
    #Fenetre_Losange = 6
  EndEnumeration
  
  Enumeration Gadgets
    #Str_Cote_Losange = 28
    #Str_Surface_Losange
    #Str_Perimetre_Losange
    #Losange
  EndEnumeration
  
  Structure ObjetLosange
    ID.i
    Cote_Losange.d
    Surface_Losange.d
    Perimetre_Losange.d
  EndStructure
  
  Global.ObjetLosange *Losange
  
  Declare Ouvrir_Fenetre_Losange()
  Declare CreerLosange(ID, Cote_Losange.d)
  
EndDeclareModule
;parallelogramme
DeclareModule Parallelogramme
  
  Enumeration Fenetre
    #Fenetre_Parallelogramme = 7
  EndEnumeration
  
  Enumeration gadgets
    #Str_Longueur_Parallelogramme = 32
    #Str_Largeur_Parallelogramme
    #Str_Hauteur_Parallelogramme
    #Str_Surface_Parallelogramme
    #Str_Perimetre_Parallelogramme
    #Parallelogramme
  EndEnumeration
  
  Structure ObjetParallelogramme
    ID.i
    Longueur_Parallelogramme.d
    Largeur_Parallelogramme.d
    Hauteur_Parallelogramme.d
    Surface_Parallelogramme.d
    Perimetre_Parallelogramme.d
  EndStructure  
  
  Global.ObjetParallelogramme *Parallelogramme
  
  Declare Ouvrir_fenetre_Parallelogramme()
  Declare CreerParallelogramme(Id, Longueur_Parallelogramme.d, Largeur_Parallelogramme.d, Hauteur_Parallelogramme.d)
  
EndDeclareModule
;trapèze
DeclareModule Trapeze
  
  Enumeration Fenetre
    #Fenetre_Trapeze = 8
  EndEnumeration
  
  Enumeration Gadgets
    #Str_Cote_1_Trapeze = 38
    #Str_Cote_2_Trapeze
    #Str_Cote_3_Trapeze
    #Str_Cote_4_Trapeze
    #Str_Longueur_Mediane_Trapeze
    #Str_Hauteur_Trapeze
    #Str_Surface_Trapeze
    #Str_Perimetre_Trapeze
    #Trapeze
  EndEnumeration
  
  Structure ObjetTrapeze
    Id.i
    Cote_1.d
    Cote_2.d
    Cote_3.d
    Cote_4.d
    Longueur_Mediane.d
    Hauteur.d
    Surface.d
    Perimetre.d
  EndStructure
  
  Global.ObjetTrapeze *Trapeze
  
  Declare CreerTrapeze(ID, Cote_1.d, Cote_2.d, Cote_3.d, Cote_4.d,Hauteur.d)
  Declare Ouvrir_Fenetre_Trapeze()
  
EndDeclareModule  
;triangle quelconque
DeclareModule Triangle
  
  Enumeration Fenetre
    #Fenetre_Triangle = 9
  EndEnumeration
  
  Enumeration Gadgets
    #Str_CoteA_Triangle = 47
    #Str_CoteB_Triangle
    #Str_CoteC_Triangle
    #Str_Hauteur_Triangle
    #Str_Perimetre_Triangle
    #Str_Surface_Triangle
    #Str_AngleA_Triangle
    #Str_AngleB_Triangle
    #Str_AngleC_Triangle
  EndEnumeration
  
  Structure ObjetTriangle
    ID.i
    CoteA_Triangle.d
    CoteB_Triangle.d
    CoteC_Triangle.d
    Hauteur_Triangle.d
    Perimetre_Triangle.d
    Surface_Triangle.d
    AngleA_Triangle.d
    AngleB_Triangle.d
    AngleC_Triangle.d
  EndStructure
  
  Global.ObjetTriangle *Triangle
  
  Declare Ouvrir_fenetre_Triangle()
  Declare CreerTriangle(Id, CoteA.d, CoteB.d, CoteC.d)
  
EndDeclareModule
;polygone
DeclareModule Polygone
  
  Enumeration Fenetre
    #Fenetre_Polygone = 10
  EndEnumeration
  
  Enumeration Gadgets
    #Txt_n = 57
    #Txt_r
    #Txt_c
    #Txt_h
    #Txt_f
    #Txt_a_
    #Txt_x
    #Txt_l
    #Txt_P
    #Txt_Cc
    #Txt_Ci
    #Txt_A
    #Txt_Ac
    #Txt_Ai
    #Str_n
    #Str_r
    #Str_c
    #Str_h
    #Str_f
    #Str_a_
    #Str_x
    #Str_l
    #Str_P
    #Str_Cc
    #Str_Ci
    #Str_A
    #Str_Ac
    #Str_Ai
  EndEnumeration
  
  Structure ObjetPolygone
    ID.i
    NombreCotes.d
    LongueurCote.d
    RayonCirconscrit.d
    RayonInscrit.d
    AngleDeg.d
    AngleRad.d
    LngArc.d
    Perimetre.d
    CircCercleInscrit.d
    Surface.d
    SurfCercleCirconscrit.d
    SurfCercleInscrit.d
  EndStructure
  
  Global.ObjetPolygone *Polygone
  
  Declare Ouvrir_fenetre_Polygone()
  Declare CreerPolygone(Id, NombreCotes.d, LongueurCote.d)
  
EndDeclareModule


;Partie publique
Enumeration Fenetres
  #Fenetre_Geometrie
  #Fenetre_Carre
  #Fenetre_Cercle
  #Fenetre_Rectangle
  #Fenetre_Anneau
  #Fenetre_TriangleR
  #Fenetre_Losange
  #Fenetre_Parallelogramme  
  #Fenetre_Trapeze
  #Fenetre_Triangle
  #Fenetre_Polygone
EndEnumeration

Enumeration Gadgets
  #Str_cote_carre
  #Str_Surface_carre
  #Str_Diagonale_carre
  #Str_perimetre_carre
  #Carre
EndEnumeration

Enumeration Gadgets
  #Str_perimetre_cercle = 5
  #Str_Rayon_cercle
  #Str_Surface_Cercle
  #Str_Diametre_Cercle
  #Cercle
EndEnumeration

Enumeration Gadgets
  #Str_perimetre_Rectangle = 10
  #Str_Largeur_Rectangle
  #Str_Longueur_Rectangle
  #Str_Surface_rectangle
  #Str_Diagonale_rectangle
  #Rectangle
EndEnumeration

Enumeration gadgets
  #Str_DE = 16
  #Str_DI
  #Str_DIn
  #Str_La
  #Str_SU
  #Anneau
EndEnumeration

Enumeration Gadgets
  #Str_Base_TR = 22
  #Str_Hauteur_TR
  #Str_Hypothenuse_TR
  #Str_Perimetre_TR
  #Str_Surface_TR
  #TriangleRectangle
EndEnumeration

Enumeration Gadgets
  #Str_Cote_Losange = 28
  #Str_Surface_Losange
  #Str_Perimetre_Losange
  #Losange
EndEnumeration

Enumeration gadgets
  #Str_Longueur_Parallelogramme = 32
  #Str_Largeur_Parallelogramme
  #Str_Hauteur_Parallelogramme
  #Str_Surface_Parallelogramme
  #Str_Perimetre_Parallelogramme
  #Parallelogramme
EndEnumeration

Enumeration Gadgets
  #Str_Cote_1_Trapeze = 38
  #Str_Cote_2_Trapeze
  #Str_Cote_3_Trapeze
  #Str_Cote_4_Trapeze
  #Str_Longueur_Mediane_Trapeze
  #Str_Hauteur_Trapeze
  #Str_Surface_Trapeze
  #Str_Perimetre_Trapeze
  #Trapeze
EndEnumeration

Enumeration Gadgets
  #Str_CoteA_Triangle = 47
  #Str_CoteB_Triangle
  #Str_CoteC_Triangle
  #Str_Hauteur_Triangle
  #Str_Perimetre_Triangle
  #Str_Surface_Triangle
  #Str_AngleA_Triangle
  #Str_AngleB_Triangle
  #Str_AngleC_Triangle
  #Triangle
EndEnumeration 

Enumeration Gadgets
  #Txt_n = 57
  #Txt_r
  #Txt_c
  #Txt_h
  #Txt_f
  #Txt_a_
  #Txt_x
  #Txt_l
  #Txt_P
  #Txt_Cc
  #Txt_Ci
  #Txt_A
  #Txt_Ac
  #Txt_Ai
  #Str_n
  #Str_r
  #Str_c
  #Str_h
  #Str_f
  #Str_a_
  #Str_x
  #Str_l
  #Str_P
  #Str_Cc
  #Str_Ci
  #Str_A
  #Str_Ac
  #Str_Ai
  #Polygone
EndEnumeration

Enumeration Gadgets
  #Btn_Carre = 57
  #Btn_Cercle
  #Btn_Anneau
  #Btn_Rectangle
  #Btn_TR
  #Btn_Losange
  #Btn_Parallelogramme
  #Btn_Trapeze
  #Btn_Triangle
  #Btn_Polygone
EndEnumeration

Procedure Ouvrir_Fenetre_Geometrie()
  
  OpenWindow(#Fenetre_Geometrie,380,100,470,410,"Choisissez une figure géométrique",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#Btn_Carre,35,40,200,50,"Carré")
  ButtonGadget(#Btn_Cercle,35,110,200,50,"Cercle")
  ButtonGadget(#Btn_Rectangle,35,180,200,50,"Rectangle")
  ButtonGadget(#Btn_Anneau,35,250,200,50,"Anneau")
  ButtonGadget(#Btn_TR, 250,40,200,50,"Triangle Rectangle")
  ButtonGadget(#Btn_Losange, 250, 110, 200, 50, "Losange")
  ButtonGadget(#Btn_Parallelogramme, 250, 180, 200, 50,"Parallélogramme")
  ButtonGadget(#Btn_Trapeze, 250, 250, 200, 50, "Trapèze")
  ButtonGadget(#Btn_Triangle,35, 320, 200, 50, "Triangle quelconque")
  ButtonGadget(#Btn_Polygone,250,320, 200, 50, "Polygone")
  
EndProcedure


Module Police
  
  FontID1 = LoadFont(1,"Segoe UI",16,#PB_Font_Bold)
  FontID2 = LoadFont(2,"Segoe UI",40,#PB_Font_Bold)
  FontID3 = LoadFont(3,"Segoe UI",30,#PB_Font_Bold)
  FontID4 = LoadFont(4,"Segoe UI",10,#PB_Font_Bold)
  
EndModule


Module Verification
  
  Procedure checkFloatInput(gadget)
    Protected start,count,pointcount,new$
    SendMessage_(GadgetID(gadget),#EM_GETSEL,@start,0)
    Protected txt$ = GetGadgetText(gadget)
    Protected *p.Character = @txt$
    
    While *p\c ; <> 0
      If *p\c = '.'
        pointcount+1
        If pointcount < 2
          new$ + Chr(*p\c)
        Else
          If start>count:start-1:EndIf
        EndIf
      ElseIf count = 0 And *p\c = '-'
        new$ + Chr('-')
      ElseIf *p\c >= '0' And *p\c <= '9'
        new$ + Chr(*p\c)
      Else
        start - 1
      EndIf
      *p + SizeOf(Character)
      count + 1
    Wend
    SetGadgetText(gadget,new$)
    SendMessage_(GadgetID(gadget),#EM_SETSEL,start,start)
  EndProcedure
  
EndModule


Module Carre
  
  Procedure CreerCarre(ID, Co.d)
    *Carre = AllocateMemory(SizeOf(objetCarre))
    *Carre\Surface = Co * Co
    *Carre\Perimetre = Co * 4
    *Carre\Diagonale = Co * Sqr(2)
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Carre()
    
    If OpenWindow(#Fenetre_carre, 216, 0, 375, 399, "Calcul d'un carré",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar|#PB_Window_ScreenCentered )
      
      StringGadget(#Str_cote_carre, 130, 120, 200, 40, "",#ES_RIGHT)
      GadgetToolTip(#Str_cote_carre, "Veuillez entrer le côté du carré")
      SetGadgetFont(#Str_cote_carre, Police::FontID1)
      StringGadget(#Str_Surface_carre, 130, 180, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_Surface_carre, Police::FontID1)
      StringGadget(#Str_Diagonale_carre, 130, 240, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_Diagonale_carre, Police::FontID1)
      StringGadget(#Str_perimetre_carre, 130, 300, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_perimetre_carre, Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Carre))
        BackColor(Point(0, 0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(100, 30, "Carré")
        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(20, 120, "Largeur :")        
        DrawText(20, 180, "Surface :")        
        DrawText(20, 240, "Diagonale :")        
        DrawText(20, 300, "Périmètre :")
        
        StopDrawing()
        
      EndIf
      
    EndIf
    
    SetActiveGadget(#Str_cote_carre)
    
  EndProcedure
  
EndModule

Module Cercle
  
  Procedure CreerCercle(ID, Rayon.d)
    *Cercle = AllocateMemory(SizeOf(ObjetCercle))
    *Cercle\Diametre = Rayon * 2
    *Cercle\Perimetre = 2 * #PI * Rayon
    *Cercle\Surface = #PI / 4 * Pow(*Cercle\Diametre, 2)
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Cercle()
    If OpenWindow(#Fenetre_Cercle, 216, 0, 375, 420, "Calcul d'un Cercle", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Rayon_cercle, 130, 150, 200, 40, "",#ES_RIGHT)
      GadgetToolTip(#Str_Rayon_cercle, "Veuillez entrer la Rayon du Cercle")
      SetGadgetFont(#Str_Rayon_cercle, Police::FontID1)
      
      StringGadget(#Str_Surface_Cercle, 130, 210, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_Surface_Cercle, Police::FontID1)
      
      StringGadget(#Str_Diametre_Cercle, 130, 270, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_Diametre_Cercle, Police::FontID1)
      
      StringGadget(#Str_perimetre_cercle, 130, 330, 200, 40, "",#ES_RIGHT)
      SetGadgetFont(#Str_perimetre_cercle, Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Cercle))
        BackColor(Point(0, 0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(100, 30, "Cercle")        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(20, 150, "Rayon :")        
        DrawText(20, 210, "Surface :")        
        DrawText(20, 270, "Diamètre:")        
        DrawText(20, 330, "Périmètre :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Rayon_cercle)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Rectangle
  
  Procedure CreerRectangle(Id, Longueur.d, Largeur.d)
    *Rectangle = AllocateMemory(SizeOf(ObjetRectangle))
    *Rectangle\Perimetre = (Longueur + Largeur) * 2
    *Rectangle\Surface = Longueur * Largeur
    *Rectangle\Diagonale = Sqr(Pow(Longueur, 2) + Pow(Largeur, 2))
  EndProcedure 
  
  Procedure Ouvrir_Fenetre_Rectangle()
    If OpenWindow(#Fenetre_Rectangle, 216, 0, 375, 420, "Calcul d'un rectangle", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Longueur_Rectangle, 130, 120, 200, 40, "",#ES_RIGHT)
      GadgetToolTip(#Str_Longueur_Rectangle, "Veuillez entrer la longueur du rectangle")
      SetGadgetFont(#Str_Longueur_Rectangle,Police::FontID1)
      StringGadget(#Str_Largeur_Rectangle,130,180,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Largeur_Rectangle,"Veuillez entrer la largeur du rectangle")
      SetGadgetFont(#Str_Largeur_Rectangle, Police::FontID1)      
      StringGadget(#Str_Surface_rectangle, 130, 240, 200, 40, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_rectangle, Police::FontID1)
      StringGadget(#Str_Diagonale_rectangle, 130, 300, 200, 40, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Diagonale_rectangle, Police::FontID1)
      StringGadget(#Str_perimetre_Rectangle, 130, 360, 200, 40, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_perimetre_Rectangle, Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Rectangle))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(60, 30, "Rectangle")        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(20, 120, "Longueur :")
        DrawText(20, 180, "Largeur :")
        DrawText(20, 240, "Surface :")        
        DrawText(20, 300, "Diagonale :")        
        DrawText(20, 360, "Périmètre :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Longueur_Rectangle)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Anneau
  
  Procedure CreerAnneau(ID,Di.d,De.d)
    *Anneau = AllocateMemory(SizeOf(ObjetAnneau))
    *Anneau\DiametreIntermediaire = (De+Di)/2
    *Anneau\Largeur = De-Di
    *Anneau\Surface = #PI * *Anneau\DiametreIntermediaire * *Anneau\Largeur
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Anneau()
    If OpenWindow(#Fenetre_Anneau,0,0,400,420,"Calcul d'un anneau",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      
      StringGadget(#Str_DE,250,120,100,40,"",#ES_RIGHT)
      StringGadget(#Str_DI,250,180,100,40,"",#ES_RIGHT)
      StringGadget(#Str_DIn,250,240,100,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      StringGadget(#Str_La,250,300,100,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      StringGadget(#Str_SU,250,360,100,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      
      For i = #Str_DE To #Str_SU
        SetGadgetFont(i, Police::FontID1)
      Next
      
      If StartDrawing(WindowOutput(#Fenetre_Anneau))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(100,30,"Anneau")        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(5,120,"Diamètre externe :")
        DrawText(5,180,"Diamètre interne :")
        DrawText(5,240,"Diamètre intermédiaire :")
        DrawText(5,300,"Epaisseur :")      
        DrawText(5,360,"Surface :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_DE)
      
    EndIf
    
  EndProcedure
  
EndModule

Module TriangleRectangle
  
  Procedure CreerTriangleRectangle(Id, Base.d, Hauteur.d)
    *TriangleRectangle = AllocateMemory(SizeOf(ObjetTriangleRectangle))
    *TriangleRectangle\Surface = (Base * Hauteur) / 2
    *TriangleRectangle\Hypothenuse = Sqr(Pow(Base, 2) + Pow(Hauteur, 2))
    *TriangleRectangle\Perimetre = Base + Hauteur + *TriangleRectangle\Hypothenuse
  EndProcedure
  
  Procedure Ouvrir_Fenetre_TriangleRectangle()
    If OpenWindow(#Fenetre_TriangleR,216,0,400,420,"Calcul d'un triangle rectangle",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Base_TR,170,120,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Base_TR,"Veuillez entrer la base")
      SetGadgetFont(#Str_Base_TR,Police::FontID1)
      StringGadget(#Str_Hauteur_TR,170,180,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Hauteur_TR,"Veuillez entrer la hauteur")
      SetGadgetFont(#Str_Hauteur_TR,Police::FontID1)
      StringGadget(#Str_Hypothenuse_TR,170,240,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Hypothenuse_TR,Police::FontID1)
      StringGadget(#Str_Surface_TR,170,300,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_TR,Police::FontID1)
      StringGadget(#Str_Perimetre_TR,170,360,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Perimetre_TR,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_TriangleR))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID3)
        
        FrontColor(#Red)
        DrawText(20,30,"Triangle Rectangle")
        
        DrawingFont(Police::FontID1)
        FrontColor(#Black)
        DrawText(20,120,"Longueur :")
        DrawText(20,180,"Largeur :")
        DrawText(20,240,"Hypothénuse :")
        DrawText(20,300,"Surface :")
        DrawText(20,360,"Périmètre :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Base_TR)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Losange
  
  Procedure CreerLosange(ID, Cote_Losange.d)
    *Losange = AllocateMemory(SizeOf(ObjetLosange))
    *Losange\Perimetre_Losange = Cote_Losange * 4
    *Losange\Surface_Losange = Cote_Losange * Cote_Losange
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Losange()
    If OpenWindow(#Fenetre_Losange,216,0,400,420,"Calcul d'un losange",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Cote_Losange,170,120,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Cote_Losange,"Veuillez entrer la longueur du côté")
      SetGadgetFont(#Str_Cote_Losange,Police::FontID1)
      StringGadget(#Str_Surface_Losange,170,240,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_Losange,Police::FontID1)
      StringGadget(#Str_Perimetre_Losange,170,360,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Perimetre_Losange,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Losange))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(60,30,"Losange")
        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(20,120,"Côté :")
        DrawText(20,240,"Surface :")
        DrawText(20,360,"Périmètre :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Cote_Losange)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Parallelogramme
  
  Procedure CreerParallelogramme(Id, Longueur_Parallelogramme.d, Largeur_Parallelogramme.d, Hauteur_Parallelogramme.d)
    *Parallelogramme = AllocateMemory(SizeOf(ObjetParallelogramme))
    *Parallelogramme\Perimetre_Parallelogramme = (2 * Longueur_Parallelogramme) + (2 * Largeur_Parallelogramme)
    *Parallelogramme\Surface_Parallelogramme = Longueur_Parallelogramme * Hauteur_Parallelogramme
  EndProcedure
  
  Procedure Ouvrir_fenetre_Parallelogramme()
    If OpenWindow(#Fenetre_Parallelogramme,216,0,375,420,"Calcul d'un parallélogramme",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Longueur_Parallelogramme,130,120,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Longueur_Parallelogramme,"Veuillez entrer la longueur du parallélogramme")
      SetGadgetFont(#Str_Longueur_Parallelogramme,Police::FontID1)
      StringGadget(#Str_Largeur_Parallelogramme,130,180,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Largeur_Parallelogramme,"Veuillez entrer la largeur du parallélogramme")
      SetGadgetFont(#Str_Largeur_Parallelogramme,Police::FontID1)
      StringGadget(#Str_Hauteur_Parallelogramme,130,240,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Hauteur_Parallelogramme,"Veuillez entrer la hauteur du parallélogramme")
      SetGadgetFont(#Str_Hauteur_Parallelogramme,Police::FontID1)
      StringGadget(#Str_Surface_Parallelogramme,130,300,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_Parallelogramme,Police::FontID1)
      StringGadget(#Str_Perimetre_Parallelogramme,130,360,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Perimetre_Parallelogramme,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Parallelogramme))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Red)
        DrawText(100,30,"Parallélogramme")
        
        FrontColor(#Black)
        DrawText(20,120,"Longueur :")
        DrawText(20,180,"Largeur :")
        DrawText(20,240,"Hauteur :")
        DrawText(20,300,"Surface :")
        DrawText(20,360,"Périmètre :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Longueur_Parallelogramme)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Trapeze
  
  Procedure CreerTrapeze(ID, Cote_1.d, Cote_2.d, Cote_3.d, Cote_4.d, Hauteur.d)
    *Trapeze = AllocateMemory(SizeOf(ObjetTrapeze))
    *Trapeze\Surface = (Cote_1 + Cote_3) / (2 * Hauteur)
    *Trapeze\Longueur_Mediane = (Cote_1 + Cote_3) / 2
    *Trapeze\Perimetre = Cote_1 + Cote_2 + Cote_3 + Cote_4
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Trapeze()
    If OpenWindow(#Fenetre_Trapeze,216,0,375,600,"Calcul d'un trapèze",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_Cote_1_Trapeze,130,120,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Cote_1_Trapeze,"Veuillez entrer le côté 1")
      SetGadgetFont(#Str_Cote_1_Trapeze,Police::FontID1)
      StringGadget(#Str_Cote_2_Trapeze,130,180,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Cote_2_Trapeze,"Veuillez entrer le côté 2")
      SetGadgetFont(#Str_Cote_2_Trapeze,Police::FontID1)
      StringGadget(#Str_Cote_3_Trapeze,130,240,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Cote_3_Trapeze,"Veuillez entrer le côté 3")
      SetGadgetFont(#Str_Cote_3_Trapeze,Police::FontID1)
      StringGadget(#Str_Cote_4_Trapeze,130,300,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Cote_4_Trapeze,"Veuillez entrer le côté 4")
      SetGadgetFont(#Str_Cote_4_Trapeze,Police::FontID1)
      StringGadget(#Str_Hauteur_Trapeze,130,360,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_Hauteur_Trapeze,"Veuillez entrer la hauteur")
      SetGadgetFont(#Str_Hauteur_Trapeze,Police::FontID1)
      StringGadget(#Str_Longueur_Mediane_Trapeze,130,420,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Longueur_Mediane_Trapeze,Police::FontID1)
      StringGadget(#Str_Surface_Trapeze,130,480,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_Trapeze,Police::FontID1)
      StringGadget(#Str_Perimetre_Trapeze,130,540,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Perimetre_Trapeze,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Trapeze))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID2)
        
        FrontColor(#Red)
        DrawText(80,30,"Trapèze")
        
        
        DrawingFont(Police::FontID1)
        
        FrontColor(#Black)
        DrawText(20,120,"Côté 1 :")
        DrawText(20,180,"Côté 2 :")
        DrawText(20,240,"Côté 3 :")
        DrawText(20,300,"Côté 4 :")
        DrawText(20,360,"Hauteur :")
        DrawText(20,420,"Médiane :")
        DrawText(20,480,"Surface :")
        DrawText(20,540,"Périmètre")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_Cote_1_Trapeze)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Triangle
  
  Procedure CreerTriangle(Id, CoteA.d, CoteB.d, CoteC.d)
    Protected s = (CoteA + CoteB + CoteC) /2
    *Triangle = AllocateMemory(SizeOf(ObjetTriangle))
    *Triangle\Surface_Triangle = Sqr(s*(s-CoteC)*(s-CoteA)*(s-CoteB))
    *Triangle\Hauteur_Triangle = (2 * *Triangle\Surface_Triangle) / CoteC
    *Triangle\Perimetre_Triangle = CoteA + CoteB + CoteC
    
    *Triangle\AngleA_Triangle = Degree(ACos((Pow(CoteB, 2) + Pow(CoteC, 2) - Pow(CoteA, 2)) / (2 * CoteB * CoteC)))
    *Triangle\AngleC_Triangle = Degree(ACos((Pow(CoteA, 2) + Pow(CoteC, 2) - Pow(CoteB, 2)) / (2 * CoteA * CoteC)))
    *Triangle\AngleB_Triangle = Degree(ACos((Pow(CoteA, 2) + Pow(CoteB, 2) - Pow(CoteC, 2)) / (2 * CoteA * CoteB)))
  EndProcedure
  
  Procedure Ouvrir_Fenetre_Triangle()
    If OpenWindow(#Fenetre_Triangle,216,0,410,660,"Calcul d'un triangle quelconque",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
      
      StringGadget(#Str_CoteA_Triangle,170,120,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_CoteA_Triangle,"Veuillez entrer le côté A")
      SetGadgetFont(#Str_CoteA_Triangle,Police::FontID1)
      StringGadget(#Str_CoteB_Triangle,170,180,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_CoteB_Triangle,"Veuillez entrer le côté B")
      SetGadgetFont(#Str_CoteB_Triangle,Police::FontID1)
      StringGadget(#Str_CoteC_Triangle,170,240,200,40,"",#ES_RIGHT)
      GadgetToolTip(#Str_CoteC_Triangle,"Veuillez entrer le côté C")
      SetGadgetFont(#Str_CoteC_Triangle,Police::FontID1)
      StringGadget(#Str_Hauteur_Triangle,170,300,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Hauteur_Triangle,Police::FontID1)
      StringGadget(#Str_Surface_Triangle,170,360,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Surface_Triangle,Police::FontID1)
      StringGadget(#Str_Perimetre_Triangle,170,420,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Perimetre_Triangle,Police::FontID1)
      StringGadget(#Str_AngleA_Triangle,170,480,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_AngleA_Triangle,Police::FontID1)
      StringGadget(#Str_AngleB_Triangle,170,540,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_AngleB_Triangle,Police::FontID1)
      StringGadget(#Str_AngleC_Triangle,170,600,200,40,"",#PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_AngleC_Triangle,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Triangle))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID3)
        
        FrontColor(#Red)
        DrawText(10,30,"Triangle quelconque")
        
        DrawingFont(Police::FontID1)
        FrontColor(#Black)
        DrawText(20,120,"Côté A :")
        DrawText(20,180,"Coté B :")
        DrawText(20,240,"Côté C :")
        DrawText(20,300,"Hauteur :")
        DrawText(20,360,"Surface :")
        DrawText(20,420,"Périmètre :")
        DrawText(20,480,"Angle A :")
        DrawText(20,540,"Angle B :")
        DrawText(20,600,"Angle C :")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_CoteA_Triangle)
      
    EndIf
    
  EndProcedure
  
EndModule

Module Polygone
  
  Procedure CreerPolygone(Id, NombreCotes.d, LongueurCote.d)
    Global acd.d, acr.d, rcc.d, rci.d, la.d, ci.d, s.d, ac.d, ai.d
    ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
    *Polygone = AllocateMemory(SizeOf(ObjetPolygone))
    If *Polygone
      ;Initialiser la longueur et la largeur.
      *Polygone\NombreCotes = NombreCotes
      *Polygone\LongueurCote = LongueurCote
      If *Polygone\NombreCotes > 0.0
        acd = 360 / NombreCotes
        *Polygone\AngleDeg = acd
        
        acr = Radian(*Polygone\AngleDeg)
        *Polygone\AngleRad = acr
        
        rcc = Sin(*Polygone\AngleRad / 2)
        *Polygone\RayonCirconscrit = rcc
        
        rci = *Polygone\RayonCirconscrit * Cos(#PI / NombreCotes)
        *Polygone\RayonInscrit = rci
        
        la = *Polygone\RayonCirconscrit * *Polygone\AngleRad
        *Polygone\LngArc = la
        
        *Polygone\Perimetre = *Polygone\NombreCotes * *Polygone\LongueurCote
        
        ci = 2 * #PI + *Polygone\RayonInscrit
        *Polygone\CircCercleInscrit = ci
        
        s = *Polygone\NombreCotes * *Polygone\RayonInscrit * *Polygone\LongueurCote / 2
        *Polygone\Surface = s
        
        ac = #PI * Pow(*Polygone\RayonCirconscrit, 2)
        *Polygone\SurfCercleCirconscrit = ac
        
        ai = #PI * Pow(*Polygone\RayonInscrit, 2)
        *Polygone\SurfCercleInscrit = ai
        
        ;Retourne un pointeur à notre objet.
        ProcedureReturn *Polygone
      EndIf
    EndIf
  EndProcedure
  
  Procedure Ouvrir_fenetre_Polygone()
    If OpenWindow(#Fenetre_Polygone, 454, 26, 500, 410, "Calcul d'un polygone régulier", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
      StringGadget(#Str_n, 250, 48, 245, 30, "", #ES_RIGHT)
      GadgetToolTip(#Str_n, "Veuillez entrer le nombre de côtés")
      SetGadgetFont(#Str_n,Police::FontID1)
      StringGadget(#Str_c, 250, 78, 245, 30, "", #ES_RIGHT)
      GadgetToolTip(#Str_c, "Veuillez entrer la longueur des côtés")
      SetGadgetFont(#Str_c,Police::FontID1)
      StringGadget(#Str_r, 250, 108, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_r,Police::FontID1)
      StringGadget(#Str_h, 250, 138, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_h,Police::FontID1)
      StringGadget(#Str_a_, 250, 168, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_a_,Police::FontID1)
      StringGadget(#Str_x, 250, 198, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_x,Police::FontID1)
      StringGadget(#Str_l, 250, 228, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_l,Police::FontID1)
      StringGadget(#Str_P, 250, 258, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_p,Police::FontID1)
      StringGadget(#Str_Ci, 250, 288, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Ci,Police::FontID1)
      StringGadget(#Str_A, 250, 318, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_A,Police::FontID1)
      StringGadget(#Str_Ac, 250, 348, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Ac,Police::FontID1)
      StringGadget(#Str_Ai, 250, 378, 245, 30, "", #PB_String_ReadOnly|#ES_RIGHT)
      SetGadgetFont(#Str_Ai,Police::FontID1)
      
      If StartDrawing(WindowOutput(#Fenetre_Polygone))
        BackColor(Point(0,0))
        
        DrawingFont(Police::FontID3)
        
        FrontColor(#Red)
        DrawText(70,-10,"Polygone régulier")
        
        DrawingFont(Police::FontID4)
        FrontColor(#Black)
        DrawText(0, 50, "Nombre de côtés")
        DrawText(0, 80, "Longueur du côté")
        DrawText(0, 110, "Rayon du cercle circonscrit")
        DrawText(0, 140, "Apothème, rayon du cercle inscrit")
        DrawText(0, 170, "Angle au centre en degrés")
        DrawText(0, 200, "Angle au centre en radians")
        DrawText(0, 230, "Longueur de l'arc")
        DrawText(0, 260, "Périmètre")
        DrawText(0, 290, "Circonférence du cercle inscrit")
        DrawText(0, 320, "Surface")
        DrawText(0, 350, "Surface du cercle circonscrit")
        DrawText(0, 380, "Surface du cercle inscrit")
        
        StopDrawing()
        
      EndIf
      
      SetActiveGadget(#Str_n)
    EndIf
  EndProcedure
  
EndModule

Ouvrir_Fenetre_Geometrie()


Define.i Evenement, EvenementFenetre, EvenementGadget, TypeEvenement

Repeat
  
  Evenement = WaitWindowEvent()
  TypeEvenement = EventType()
  
  Select Evenement
      ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_Gadget
      EvenementGadget = EventGadget()
      Select EvenementGadget
        Case #Btn_Carre
          Carre::Ouvrir_Fenetre_Carre()
        Case #Btn_Cercle
          Cercle::Ouvrir_Fenetre_Cercle()
        Case #Btn_Rectangle
          Rectangle::Ouvrir_Fenetre_Rectangle()
        Case #Btn_Anneau
          Anneau::Ouvrir_Fenetre_Anneau()
        Case #Btn_TR
          TriangleRectangle::Ouvrir_Fenetre_TriangleRectangle()
        Case #Btn_Losange
          Losange::Ouvrir_Fenetre_Losange()
        Case #Btn_Parallelogramme
          Parallelogramme::Ouvrir_fenetre_Parallelogramme()
        Case #Btn_Trapeze
          Trapeze::Ouvrir_Fenetre_Trapeze()
        Case #Btn_Triangle
          Triangle::Ouvrir_fenetre_Triangle()
        Case #Btn_Polygone
          Polygone::Ouvrir_fenetre_Polygone()
          
          ;carré
        Case #Str_cote_carre
          If Val(GetGadgetText(#Str_cote_carre)) >= 0
            Carre::CreerCarre(#Carre,ValD(GetGadgetText(#Str_cote_carre)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_cote_carre)) <> 0.0
              SetGadgetText(#Str_perimetre_carre, StrD(Carre::*Carre\Perimetre))
              SetGadgetText(#Str_Surface_carre, StrD(Carre::*Carre\Surface))
              SetGadgetText(#Str_Diagonale_carre, StrD(Carre::*Carre\Diagonale))
            EndIf
          EndIf
          
          ;cercle    
        Case #Str_Rayon_cercle
          If Val(GetGadgetText(#Str_Rayon_cercle)) >= 0
            Cercle::CreerCercle(#Cercle,ValD(GetGadgetText(#Str_Rayon_cercle)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Rayon_cercle)) <> 0.0
              SetGadgetText(#Str_Surface_Cercle,StrD(Cercle::*Cercle\Surface))
              SetGadgetText(#Str_Diametre_Cercle, StrD(Cercle::*Cercle\Diametre))
              SetGadgetText(#Str_perimetre_cercle, StrD(Cercle::*Cercle\Perimetre))
            EndIf
          EndIf
          
          ;rectangle          
        Case #Str_Largeur_Rectangle, #Str_Longueur_Rectangle
          If Val(GetGadgetText(#Str_Largeur_Rectangle)) >= 0 And Val(GetGadgetText(#Str_Longueur_Rectangle)) >= 0
            Rectangle::CreerRectangle(#Rectangle, ValD(GetGadgetText(#Str_Longueur_Rectangle)), 
                                      ValD(GetGadgetText(#Str_Largeur_Rectangle)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Largeur_Rectangle)) <> 0.0 And ValD(GetGadgetText(#Str_Longueur_Rectangle)) <> 0.0
              SetGadgetText(#Str_Surface_rectangle, StrD(Rectangle::*Rectangle\Surface))
              SetGadgetText(#Str_Diagonale_rectangle, StrD(Rectangle::*Rectangle\Diagonale))
              SetGadgetText(#Str_perimetre_Rectangle, StrD(Rectangle::*Rectangle\Perimetre))
            EndIf
          EndIf
          
          ;anneau          
        Case Anneau::#Str_DE,Anneau::#Str_DI
          If Val(GetGadgetText(Anneau::#Str_DE)) >= 0 And Val(GetGadgetText(Anneau::#Str_DI)) >= 0
            Anneau::CreerAnneau(#Anneau,ValD(GetGadgetText(Anneau::#Str_DI)),ValD(GetGadgetText(Anneau::#Str_DE)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(Anneau::#Str_DE)) <> 0.0 And ValD(GetGadgetText(Anneau::#Str_DI)) <> 0.0
              SetGadgetText(Anneau::#Str_DIn,StrD(Anneau::*Anneau\DiametreIntermediaire))
              SetGadgetText(Anneau::#Str_La,StrD(Anneau::*Anneau\Largeur))
              SetGadgetText(Anneau::#Str_SU, StrD(Anneau::*Anneau\Surface))
            EndIf
          EndIf
          
          ;triangle rectangle
        Case #Str_Base_TR, #Str_Hauteur_TR
          If Val(GetGadgetText(#Str_Base_TR)) >= 0 And Val(GetGadgetText(#Str_Hauteur_TR)) >= 0
            TriangleRectangle::CreerTriangleRectangle(#TriangleRectangle, ValD(GetGadgetText(#Str_Base_TR)),
                                                      ValD(GetGadgetText(#Str_Hauteur_TR)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Base_TR)) <> 0.0 And ValD(GetGadgetText(#Str_Hauteur_TR)) <> 0.0
              SetGadgetText(#Str_Hypothenuse_TR, StrD(TriangleRectangle::*TriangleRectangle\Hypothenuse))
              SetGadgetText(#Str_Surface_TR, StrD(TriangleRectangle::*TriangleRectangle\Surface))
              SetGadgetText(#Str_Perimetre_TR, StrD(TriangleRectangle::*TriangleRectangle\Perimetre))
            EndIf
          EndIf
          
          ;losange
        Case #Str_Cote_Losange
          If Val(GetGadgetText(#Str_Cote_Losange)) >= 0
            Losange::CreerLosange(#Losange,ValD(GetGadgetText(#Str_Cote_Losange)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Cote_Losange)) <> 0.0
              SetGadgetText(#Str_Perimetre_Losange, StrD(Losange::*Losange\Perimetre_Losange))
              SetGadgetText(#Str_Surface_Losange, StrD(Losange::*Losange\Surface_Losange))
            EndIf
          EndIf
          
          ;parallelogramme
        Case #Str_Longueur_Parallelogramme,#Str_Largeur_Parallelogramme,#Str_Hauteur_Parallelogramme
          If Val(GetGadgetText(#Str_Longueur_Parallelogramme)) >= 0 And
             Val(GetGadgetText(#Str_Largeur_Parallelogramme))  >= 0 And
             Val(GetGadgetText(#Str_Hauteur_Parallelogramme))  >= 0
            Parallelogramme::CreerParallelogramme(#Parallelogramme, ValD(GetGadgetText(#Str_Longueur_Parallelogramme)),
                                                  ValD(GetGadgetText(#Str_Largeur_Parallelogramme)),
                                                  ValD(GetGadgetText(#Str_Hauteur_Parallelogramme)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Longueur_Parallelogramme)) <> 0.0 And
               ValD(GetGadgetText(#Str_Largeur_Parallelogramme)) <> 0.0 And
               ValD(GetGadgetText(#Str_Hauteur_Parallelogramme))  <> 0.0
              SetGadgetText(#Str_Perimetre_Parallelogramme, StrD(Parallelogramme::*Parallelogramme\Perimetre_Parallelogramme))
              SetGadgetText(#Str_Surface_Parallelogramme, StrD(Parallelogramme::*Parallelogramme\Surface_Parallelogramme))
            EndIf
          EndIf  
          
          ;trapèze
        Case #Str_Cote_1_Trapeze, #Str_Cote_2_Trapeze, #Str_Cote_3_Trapeze, #Str_Cote_4_Trapeze, #Str_Hauteur_Trapeze
          If Val(GetGadgetText(#Str_Cote_1_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_2_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_3_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_4_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Hauteur_Trapeze)) >= 0
            Trapeze::CreerTrapeze(#Trapeze,ValD(GetGadgetText(#Str_Cote_1_Trapeze)),
                                  ValD(GetGadgetText(#Str_Cote_2_Trapeze)),
                                  ValD(GetGadgetText(#Str_Cote_3_Trapeze)),
                                  ValD(GetGadgetText(#Str_Cote_4_Trapeze)),
                                  ValD(GetGadgetText(#Str_Hauteur_Trapeze)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Cote_1_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_2_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_3_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_4_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Hauteur_Trapeze)) <> 0.0
              SetGadgetText(#Str_Longueur_Mediane_Trapeze, StrD(Trapeze::*Trapeze\Longueur_Mediane))
              SetGadgetText(#Str_Perimetre_Trapeze, StrD(Trapeze::*Trapeze\Perimetre))
              SetGadgetText(#Str_Surface_Trapeze, StrD(Trapeze::*Trapeze\Surface))
            EndIf
          EndIf
          ;triangle
        Case #Str_CoteA_Triangle, #Str_CoteB_Triangle, #Str_CoteC_Triangle
          If Val(GetGadgetText(#Str_CoteA_Triangle)) >= 0 And
             Val(GetGadgetText(#Str_CoteB_Triangle)) >= 0 And
             Val(GetGadgetText(#Str_CoteC_Triangle)) >= 0
            Triangle::CreerTriangle(#Triangle, ValD(GetGadgetText(#Str_CoteA_Triangle)),
                                    ValD(GetGadgetText(#Str_CoteB_Triangle)),
                                    ValD(GetGadgetText(#Str_CoteC_Triangle)))
            Verification::checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_CoteA_Triangle)) <> 0.0 And
               ValD(GetGadgetText(#Str_CoteB_Triangle)) <> 0.0 And
               ValD(GetGadgetText(#Str_CoteC_Triangle))
              SetGadgetText(#Str_Hauteur_Triangle, StrD(Triangle::*Triangle\Hauteur_Triangle))
              SetGadgetText(#Str_Perimetre_Triangle, StrD(Triangle::*Triangle\Perimetre_Triangle))
              SetGadgetText(#Str_Surface_Triangle, StrD(Triangle::*Triangle\Surface_Triangle))
              SetGadgetText(#Str_AngleA_Triangle, StrD(Triangle::*Triangle\AngleA_Triangle))
              SetGadgetText(#Str_AngleB_Triangle, StrD(Triangle::*Triangle\AngleB_Triangle))
              SetGadgetText(#Str_AngleC_Triangle, StrD(Triangle::*Triangle\AngleC_Triangle))
            EndIf
          EndIf 
          
          ;Polygone
          
        Case #Str_n, #Str_c 
          Polygone::CreerPolygone(#Polygone, ValD(GetGadgetText(#Str_n)), ValD(GetGadgetText(#Str_c)))
          Verification::checkFloatInput(EventGadget())
          If ValF(GetGadgetText(#Str_n)) > 2 And ValF(GetGadgetText(#Str_c)) > 0
            SetGadgetText(#Str_r, StrD(Polygone::*Polygone\RayonCirconscrit))
            SetGadgetText(#str_h, StrD(Polygone::*Polygone\RayonInscrit))
            SetGadgetText(#Str_a_, StrD(Polygone::*Polygone\AngleDeg))
            SetGadgetText(#Str_x, StrD(Polygone::*Polygone\AngleRad))
            SetGadgetText(#Str_l, StrD(Polygone::*Polygone\LngArc))
            SetGadgetText(#str_P, StrD(Polygone::*Polygone\Perimetre))
            SetGadgetText(#Str_Ci, StrD(Polygone::*Polygone\RayonInscrit))
            SetGadgetText(#Str_A, StrD(Polygone::*Polygone\Surface))
            SetGadgetText(#Str_Ac, StrD(Polygone::*Polygone\SurfCercleCirconscrit))
            SetGadgetText(#Str_Ai, StrD(Polygone::*Polygone\SurfCercleInscrit))
          EndIf
          
      EndSelect ; Fin EvenementGadget
                ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      Select EvenementFenetre
        Case #Fenetre_Geometrie
          CloseWindow(#Fenetre_Geometrie)
          Break
        Case #Fenetre_Carre
          CloseWindow(#Fenetre_Carre)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Cercle
          CloseWindow(#Fenetre_Cercle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Rectangle
          CloseWindow(#Fenetre_Rectangle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Anneau
          CloseWindow(#Fenetre_Anneau)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_TriangleR
          CloseWindow(#Fenetre_TriangleR)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Losange
          CloseWindow(#Fenetre_Losange)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Parallelogramme
          CloseWindow(#Fenetre_Parallelogramme)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Trapeze
          CloseWindow(#Fenetre_Trapeze)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Triangle
          CloseWindow(#Fenetre_Triangle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Polygone
          CloseWindow(#Fenetre_Polygone)
          Ouvrir_Fenetre_Geometrie()
      EndSelect
      ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  EndSelect
ForEver
End

Re: MODULES énumérations publiques ou privées

Publié : mar. 21/juil./2015 11:37
par falsam
Bonjour Micoute. Au risque d'être brutal, la question ne se pose même pas. Ton application n'a pas besoin de module.

Un module est un morceau de code isoler d'un code principal, permettant ainsi la réutilisation de ce module sans risque de conflit de nom. Un module peut servir pour d'autres codes.

C'est pas parce les modules existent qu'il faut les utiliser coute que coute. Dans ton code c'est terrible il y en a partout. Ca devient presque illisible.

Tu as aussi un souci avec les structures. Regarde par exemple ces deux structures

Code : Tout sélectionner

Structure ObjetCercle
    ID.i
    Rayon.d
    Diametre.d    
    Perimetre.d
    Surface.d
  EndStructure
et celui là

Code : Tout sélectionner

Structure ObjetRectangle
    Id.i
    Longueur.d
    Largeur.d
    Perimetre.d
    Surface.d
    Diagonale.d
  EndStructure
id, perimetre et surface sont communs.

Tu pourrais procéder de cette maniére pour alléger ton code.

Code : Tout sélectionner

Structure Forme
  id.i
  Perimetre.d
  SUrface.d
EndStructure


Structure ObjetRectangle Extends Forme
  Longueur.d
  Largeur.d
  Diagonale.d
EndStructure

Structure ObjetCercle Extends Forme
  Rayon.d
  Diametre.d    
EndStructure
Voila pour ma première impression.

Re: MODULES énumérations publiques ou privées

Publié : mar. 21/juil./2015 12:40
par Micoute
Bonjour falsam, non tu n'as pas été brutal, bien au contraire tu m'as éclairé et j'ai ainsi compris qu'on peut alléger une structure en évitant d'écrire toujours la même, mais avec un nom différent, il y a pourtant des exemples dans le fichier, mais il ne m'ont pas "percuté " !

Merci énormément, car je vais faire une sauvegarde de tes précieux conseils.

Re: MODULES énumérations publiques ou privées

Publié : mar. 21/juil./2015 17:00
par blendman
un autre truc que tu peux simplifier :

Code : Tout sélectionner

Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      Select EvenementFenetre
        Case #Fenetre_Geometrie
          CloseWindow(#Fenetre_Geometrie)
          Break
        Case #Fenetre_Carre
          CloseWindow(#Fenetre_Carre)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Cercle
          CloseWindow(#Fenetre_Cercle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Rectangle
          CloseWindow(#Fenetre_Rectangle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Anneau
          CloseWindow(#Fenetre_Anneau)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_TriangleR
          CloseWindow(#Fenetre_TriangleR)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Losange
          CloseWindow(#Fenetre_Losange)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Parallelogramme
          CloseWindow(#Fenetre_Parallelogramme)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Trapeze
          CloseWindow(#Fenetre_Trapeze)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Triangle
          CloseWindow(#Fenetre_Triangle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Polygone
          CloseWindow(#Fenetre_Polygone)
          Ouvrir_Fenetre_Geometrie()
      EndSelect
Visiblement, à chaque fois, tu fais closeWindow(EvenementFenetre).
Donc, tu peux simplement faire :

Code : Tout sélectionner

Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      closeWindow(EvenementFenetre)
      if  EvenementFenetre = #Fenetre_Geometrie
           Break
      else
           Ouvrir_Fenetre_Geometrie()
      endif

Re: MODULES énumérations publiques ou privées

Publié : mar. 21/juil./2015 19:00
par Micoute
Bonsoir bledman et merci pour cette magnifique idée.

Re: MODULES énumérations publiques ou privées

Publié : mer. 22/juil./2015 8:02
par blendman
c'est un truc que j'emploie très souvent à vrai dire ;)

Il y a toujours des petites astuces comme celle-là qui font gagner du temps.

Autre exemple, si ton enumération se suit, au lieu de vérifier chaque élément, tu peux faire une boucle sur certains d'entre eux :

Code : Tout sélectionner

Enumeration 
  #gadget1
  #gadget2
  #gadget3
  #gadget4
  #gadget5  
EndEnumeration

OpenWindow(0, 0, 0, 220, 200, "test gadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
For i = #gadget1 To #gadget5
  ButtonGadget(i,10,10+i*23,50,20,"Button"+Str(i))
Next i

Repeat
  
  Event = WaitWindowEvent()
  Eventgadget = EventGadget()
  
  Select event
      
    Case #PB_Event_CloseWindow
      End
      
    Case #PB_Event_Gadget
      
      For i= #gadget1 To #gadget5
        If eventgadget = i
          Debug GetGadgetText(eventgadget)
          Break
        EndIf
      Next 
      
  EndSelect
      
Until Event = #PB_Event_CloseWindow
Tu peux aussi faire ça avec des gadget dynamiques et un tableau ou une liste dans lesquels tu les stockes.

Dans mon logiciel animatoon, je vérifier les calques comme ça, puisque leur gadgets des claques (la prévisualisation) est créé dynamiquement.
C'est une technique que j'emploi assez souvent pour vérifier un groupe d'élément lié entre eux (je vérifie les outils de peintures aussi de cette manière, etc..).

Re: MODULES énumérations publiques ou privées

Publié : mer. 22/juil./2015 9:20
par Micoute
Merci blendman pour toutes ces astuces.