Code : Tout sélectionner
;Classe Geometrie
;-(Tel est le visage public de mes classes qui permettent à PB d'appeler mes méthodes de fonctions).
Interface ObjetCarre
DefinirCote.d(NouvelleLongueur)
Surface.d()
Cote.d()
Diagonale.d()
Perimetre.d()
Detruire()
EndInterface
Interface ObjetCercle
DefinirRayon.d(NouveauRayon)
Surface.d()
Rayon.d()
Diametre.d()
Perimetre.d()
Detruire()
EndInterface
Interface ObjetRectangle
DefinirLongueur.d(NouvelleLongueur)
DefinirLargeur.d(NouvelleLargeur)
Surface.d()
Longueur.d()
Largeur.d()
Diagonale.d()
Perimetre.d()
EstCarre.d()
Detruire()
EndInterface
Interface ObjetAnneau
DefinirDiametreExterne.d(DiametreExterne)
DefinirDiametreInterne.d(DiametreInterne)
DiametreIntermediaire.d()
Surface.d()
Largeur.d()
Detruire()
EndInterface
Interface ObjetTriangleRectangle
DefinirBase.d()
DefinirPetitCote.d()
Surface.d()
Base.d()
PetitCote.d()
Hypothenuse.d()
Perimetre.d()
Detruire()
EndInterface
Interface ObjetLosange
DefinirCote.d()
Cote.d()
Surface.d()
Perimetre.d()
Detruire()
EndInterface
Interface ObjetParallelogramme
DefinirLongueur.d(NouvelleLongueur)
DefinirLargeur.d(NouvelleLargeur)
Surface.d()
Longueur.d()
Largeur.d()
Perimetre.d()
EstLosange.d()
Detruire()
EndInterface
Interface ObjetTrapeze
DefinirCote1.d(NouveauCote1)
DefinirCote2.d(NouveauCote2)
DefinirCote3.d(NouveauCote3)
DefinirCote4.d(NouveauCote4)
DefinirHauteur.d(NouvelleHauteur)
Cote1.d()
Cote2.d()
Cote3.d()
Cote4.d()
Surface.d()
Hauteur.d()
Perimetre.d()
Longueur_Mediane.d()
Detruire()
EndInterface
Interface ObjetTriangle
DefinirHypothenuse.d(NouvelHypothenuse)
DefinirPetitCote.d(NouveauPetitCote)
DefinirBase.d(NouvelleBase)
DefinirHauteur.d(NouvelleHauteur)
Surface.d()
CoteA.d()
CoteB.d()
CoteC.d()
Hauteur.d()
Perimetre.d()
Detruire()
EndInterface
;-MODELE DE CLASSE CARRE.
Structure _Carre
*TableVirtuelle
Cote.d
EndStructure
;-MODELE DE CLASSE CERCLE.
Structure _Cercle
*TableVirtuelle
Rayon.d
EndStructure
;-MODELE DE CLASSE RECTANGLE.
Structure _Rectangle
*TableVirtuelle
Longueur.d
Largeur.d
EndStructure
;-MODELE DE CLASSE ANNEAU.
Structure _Anneau
*TableVirtuelle
DiametreInterne.d
DiametreExterne.d
DiametreIntermediaire.d
Surface.d
Largeur.d
EndStructure
;-MODELE DE CLASSE TRIANGLERECTANGLE
Structure _TriangleRectangle
*TableVirtuelle
Base.d
PetitCote.d
Hypothenuse.d
EndStructure
;-MODELE DE CLASSE LOSANGE
Structure _Losange
*TableVirtuelle
Cote.d
EndStructure
;-MODELE DE CLASSE PARALLELOGRAMME.
Structure _Parallelogramme
*TableVirtuelle
Longueur.d
Largeur.d
Hauteur.d
EndStructure
;-MODELE DE CLASSE TRAPEZE.
Structure _Trapeze
*TableVirtuelle
Cote1.d
Cote2.d
Cote3.d
Cote4.d
Hauteur.d
EndStructure
;-MODELE DE CLASSE TRIANGLE
Structure _Triangle
*TableVirtuelle
CoteA.d
CoteB.d
CoteC.d
Hauteur.d
EndStructure
Procedure.d CreerCarre(Cote.d = 1)
Protected *Objet._Carre
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Carre))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Carre
;Initialiser le côté.
*Objet\Cote = Cote
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote_Carre(*Auto._Carre, NouveauCote.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCote > 0
*Auto\Cote = NouveauCote
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_Carre(*Auto._Carre)
Protected Surface.d
Surface = *Auto\Cote * *Auto\Cote
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirCote_Carre(*Auto._Carre)
ProcedureReturn *Auto\Cote
EndProcedure
Procedure.d ObtenirDiagonale_Carre(*Auto._Carre)
Protected Diagonale.d
Diagonale = *Auto\Cote * Sqr(2)
ProcedureReturn Diagonale
EndProcedure
Procedure.d ObtenirPerimetre_Carre(*Auto._Carre)
If *Auto\Cote > 0
ProcedureReturn *Auto\Cote * 4
EndIf
EndProcedure
Procedure Detruire_Carre(*Auto._Carre)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerCercle(Rayon.d = 1)
Protected *Objet._Cercle
;Tentative d'allouer de la mémoire pour un modèle de Nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Cercle))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Cercle
;Initialiser le Rayon.
*Objet\Rayon = Rayon
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si le rayon est modifié avec succès.
Procedure.b DefinirRayon_Cercle(*Auto._Cercle, NouveauRayon.d)
;Ne procéder que si l'utilisateur tente de définir une Rayon non-négatif.
If NouveauRayon > 0
*Auto\Rayon = NouveauRayon
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_Cercle(*Auto._Cercle)
Protected Surface.d
Surface = 3.1415926536 * (*Auto\Rayon * *Auto\Rayon)
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirRayon_Cercle(*Auto._Cercle)
ProcedureReturn *Auto\Rayon
EndProcedure
Procedure.d ObtenirDiametre_Cercle(*Auto._Cercle)
ProcedureReturn *Auto\Rayon * 2
EndProcedure
Procedure.d ObtenirPerimetre_Cercle(*Auto._Cercle)
ProcedureReturn *Auto\Rayon * 2 * 3.1415926536
EndProcedure
Procedure Detruire_Cercle(*Auto._Cercle)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerRectangle(Longueur.d = 1, Largeur.d = 1)
Protected *Objet._Rectangle
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Rectangle))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Rectangle
;Initialiser la longueur et la largeur.
*Objet\Longueur = Longueur
*Objet\Largeur = Largeur
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirLongueur_Rectangle(*Auto._Rectangle, NouvelleLongueur.d)
;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
If NouvelleLongueur > 0
*Auto\Longueur = NouvelleLongueur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirLargeur_Rectangle(*Auto._Rectangle, NouvelleLargeur.d)
;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
If NouvelleLargeur > 0
*Auto\Largeur = NouvelleLargeur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_Rectangle(*Auto._Rectangle)
Protected Surface.d
Surface = *Auto\Longueur * *Auto\Largeur
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirLongueur_Rectangle(*Auto._Rectangle)
ProcedureReturn *Auto\Longueur
EndProcedure
Procedure.d ObtenirLargeur_Rectangle(*Auto._Rectangle)
ProcedureReturn *Auto\Largeur
EndProcedure
Procedure.d ObtenirDiagonale_Rectangle(*Auto._Rectangle)
Protected Diagonale.d
Diagonale = Sqr(Pow(*Auto\Longueur, 2) + Pow(*Auto\Largeur, 2))
ProcedureReturn Diagonale
EndProcedure
Procedure.d ObtenirPerimetre_Rectangle(*Auto._Rectangle)
If *Auto\Longueur > 0 And *Auto\Largeur > 0
ProcedureReturn (*Auto\Longueur + *Auto\Largeur) * 2
EndIf
EndProcedure
Procedure.b Rectangle_EstCarre(*Auto._Rectangle)
If *Auto\Longueur = *Auto\Largeur
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure Detruire_Rectangle(*Auto._Rectangle)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerAnneau(DiametreInterne.d = 1, DiametreExterne.d = 1)
Protected *Objet._Anneau
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Anneau))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Anneau
;Initialiser les diamètres intérieur et extérieur.
*Objet\DiametreInterne = DiametreInterne
*Objet\DiametreExterne = DiametreExterne
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirDiametreExterne_Anneau(*Auto._Anneau, NouveauDiametre.d)
;Ne procéder que si l'utilisateur tente de définir un diamètre non-négative.
If NouveauDiametre > 0
*Auto\DiametreExterne = DiametreExterne
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le diamètre intérieur est modifié avec succès.
Procedure.b DefinirDiametreInterne_Anneau(*Auto._Anneau, NouveauDiametre.d)
;Ne procéder que si l'utilisateur tente de définir un diamètre non-négative.
If NouveauDiametre > 0
*Auto\DiametreInterne = DiametreInterne
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirDiametreIntermediaire_Anneau(*Auto._Anneau)
*Auto\DiametreIntermediaire = ((*Auto\DiametreExterne - *Auto\DiametreInterne) / 2) + *Auto\DiametreInterne
ProcedureReturn *Auto\DiametreIntermediaire
EndProcedure
Procedure.d ObtenirSurface_Anneau(*Auto._Anneau)
Protected Surface.d
Surface = #PI * *Auto\DiametreIntermediaire * *Auto\Largeur
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirLargeur_Anneau(*Auto._Anneau)
*Auto\Largeur = *Auto\DiametreExterne - *Auto\DiametreInterne
ProcedureReturn *Auto\Largeur
EndProcedure
Procedure Detruire_Anneau(*Auto._Anneau)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerTriangleRectangle(Base.d = 1.0, PetitCote.d = 1.0)
Protected *Objet._TriangleRectangle
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_TriangleRectangle))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_TriangleRectangle
;Initialiser la longueur et la largeur.
*Objet\Base = Base
*Objet\PetitCote = PetitCote
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirBase_TriangleRectangle(*Auto._TriangleRectangle, NouvelleBase.d)
;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
If NouvelleBase > 0
*Auto\Base = NouvelleBase
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirPetitCote_TriangleRectangle(*Auto._TriangleRectangle, NouveauPetitCote.d)
;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
If NouveauPetitCote > 0
*Auto\PetitCote = NouveauPetitCote
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_TriangleRectangle(*Auto._TriangleRectangle)
Protected Surface.d
Surface = (*Auto\Base * *Auto\PetitCote) / 2
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirBase_TriangleRectangle(*Auto._TriangleRectangle)
ProcedureReturn *Auto\Base
EndProcedure
Procedure.d ObtenirPetitCote_TriangleRectangle(*Auto._TriangleRectangle)
ProcedureReturn *Auto\PetitCote
EndProcedure
Procedure.d ObtenirHypothenuse_TriangleRectangle(*Auto._TriangleRectangle)
*Auto\Hypothenuse = Sqr(Pow(*Auto\Base, 2) + Pow(*Auto\PetitCote, 2))
ProcedureReturn *Auto\Hypothenuse
EndProcedure
Procedure.d ObtenirPerimetre_TriangleRectangle(*Auto._TriangleRectangle)
If *Auto\Base > 0 And *Auto\PetitCote > 0
ProcedureReturn *Auto\Base + *Auto\PetitCote + *Auto\Hypothenuse
EndIf
EndProcedure
Procedure Detruire_TriangleRectangle(*Auto._TriangleRectangle)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerLosange(Cote.d = 1)
Protected *Objet._Losange
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Losange))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Losange
;Initialiser la longueur et la largeur.
*Objet\Cote = Cote
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote_Losange(*Auto._Losange, NouveauCote.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCote > 0
*Auto\Cote = NouveauCote
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirCote_Losange(*Auto._Losange)
ProcedureReturn *Auto\Cote
EndProcedure
Procedure.d ObtenirSurface_Losange(*Auto._Losange)
Protected Surface.d
Surface = *Auto\Cote * *Auto\Cote
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirPerimetre_Losange(*Auto._Losange)
If *Auto\Cote > 0
ProcedureReturn *Auto\Cote * 4
EndIf
EndProcedure
Procedure Detruire_Losange(*Auto._Losange)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerParallelogramme(Longueur.d = 1, Largeur.d = 1, Hauteur.d = 1)
Protected *Objet._Parallelogramme
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Parallelogramme))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Parallelogramme
;Initialiser la longueur et la largeur.
*Objet\Longueur = Longueur
*Objet\Largeur = Largeur
*Objet\Hauteur = Hauteur
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirLongueur_Parallelogramme(*Auto._Parallelogramme, NouvelleLongueur.d)
;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
If NouvelleLongueur > 0
*Auto\Longueur = NouvelleLongueur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirLargeur_Parallelogramme(*Auto._Parallelogramme, NouvelleLargeur.d)
;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
If NouvelleLargeur > 0
*Auto\Largeur = NouvelleLargeur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_Parallelogramme(*Auto._Parallelogramme)
Protected Surface.d
Surface = *Auto\Longueur * *Auto\Hauteur
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirLongueur_Parallelogramme(*Auto._Parallelogramme)
ProcedureReturn *Auto\Longueur
EndProcedure
Procedure.d ObtenirLargeur_Parallelogramme(*Auto._Parallelogramme)
ProcedureReturn *Auto\Largeur
EndProcedure
Procedure.d ObtenirPerimetre_Parallelogramme(*Auto._Parallelogramme)
If *Auto\Longueur > 0 And *Auto\Largeur > 0
ProcedureReturn (*Auto\Longueur + *Auto\Largeur) * 2
EndIf
EndProcedure
Procedure.b Parallelogramme_EstLosange(*Auto._Parallelogramme)
If *Auto\Longueur = *Auto\Largeur
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure Detruire_Parallelogramme(*Auto._Parallelogramme)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerTrapeze(Cote1.d = 1, Cote2.d = 1, Cote3.d = 1, Cote4.d = 1, Hauteur.d = 1)
Protected *Objet._Trapeze
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Trapeze))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Trapeze
;Initialiser la longueur et la largeur.
*Objet\Cote1 = Cote1
*Objet\Cote2 = Cote2
*Objet\Cote3 = Cote3
*Objet\Cote4 = Cote4
*Objet\Hauteur = Hauteur
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote1_Trapeze(*Auto._Trapeze, NouveauCote1.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCote1 > 0
*Auto\Cote1 = NouveauCote1
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote2_Trapeze(*Auto._Trapeze, NouveauCote2.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCot2e > 0
*Auto\Cote2 = NouveauCote2
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote3_Trapeze(*Auto._Trapeze, NouveauCote3.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCote3 > 0
*Auto\Cote3 = NouveauCote3
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote4_Trapeze(*Auto._Trapeze, NouveauCote4.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauCote4 > 0
*Auto\Cote4 = NouveauCote4
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si la hauteur est modifiée avec succès.
Procedure.b DefinirHauteur_Trapeze(*Auto._Trapeze, NouvelleHauteur.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouvelleHauteur >= 1
*Auto\Hauteur = NouvelleHauteur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirCote1_Trapeze(*Auto._Trapeze)
ProcedureReturn *Auto\Cote1
EndProcedure
Procedure.d ObtenirCote2_Trapeze(*Auto._Trapeze)
ProcedureReturn *Auto\Cote2
EndProcedure
Procedure.d ObtenirCote3_Trapeze(*Auto._Trapeze)
ProcedureReturn *Auto\Cote3
EndProcedure
Procedure.d ObtenirCote4_Trapeze(*Auto._Trapeze)
ProcedureReturn *Auto\Cote4
EndProcedure
Procedure.d ObtenirSurface_Trapeze(*Auto._Trapeze)
Protected Surface.d
Surface = (*Auto\Cote1 + *Auto\Cote3) / 2 * *Auto\Hauteur
ProcedureReturn Surface
EndProcedure
Procedure.d ObtenirHauteur_Trapeze(*Auto._Trapeze)
ProcedureReturn *Auto\Hauteur
EndProcedure
Procedure.d ObtenirPerimetre_Trapeze(*Auto._Trapeze)
If *Auto\Cote1 > 0 And *Auto\Cote2 > 0 And *Auto\Cote3 > 0 And *Auto\Cote4 > 0 And *Auto\Hauteur > 0
ProcedureReturn *Auto\Cote1 + *Auto\Cote2 + *Auto\Cote3 + *Auto\Cote4
EndIf
EndProcedure
Procedure.d ObtenirLongueur_Mediane_Trapeze(*Auto._Trapeze)
If *Auto\Cote1 > 0 And *Auto\Cote3 > 0
ProcedureReturn (*Auto\Cote1 + *Auto\Cote3) / 2
EndIf
EndProcedure
Procedure Detruire_Trapeze(*Auto._Trapeze)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
Procedure.d CreerTriangle(CoteA.d = 4, CoteB.d = 3, CoteC.d = 5, Hauteur.d = 2.4)
Protected *Objet._Triangle
;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
*Objet = AllocateMemory(SizeOf(_Triangle))
If *Objet
;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
*Objet\TableVirtuelle = ?TableVirtuelle_Triangle
;Initialiser la longueur et la largeur.
*Objet\CoteA = CoteA
*Objet\CoteB = CoteB
*Objet\CoteC = CoteC
*Objet\Hauteur = Hauteur
EndIf
;Retourne un pointeur à notre objet.
ProcedureReturn *Objet
EndProcedure
;Retourne #True si le côté a est modifié avec succès.
Procedure.b DefinirHypothenuse_Triangle(*Auto._Triangle, NouvelHypothenuse.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouvelHypothenuse > 0
*Auto\CoteA = NouvelHypothenuse
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le côté b est modifié avec succès.
Procedure.b DefinirPetitCote_Triangle(*Auto._Triangle, NouveauPetitCote.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouveauPetitCote > 0
*Auto\CoteB = NouveauPetitCote
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si le côté c est modifié avec succès.
Procedure.b DefinirBase_Triangle(*Auto._Triangle, NouvelleBase.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouvelleBase > 0
*Auto\CoteC = NouvelleBase
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
;Retourne #True si la hauteur est modifiée avec succès.
Procedure.b DefinirHauteur_Triangle(*Auto._Triangle, NouvelleHauteur.d)
;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
If NouvelleHauteur > 0
*Auto\Hauteur = NouvelleHauteur
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure.d ObtenirSurface_Triangle(*Auto._Triangle)
If *Auto\CoteC > 0 And *Auto\Hauteur > 0
Protected Surface.d
Surface = (*Auto\CoteC * *Auto\Hauteur) / 2
ProcedureReturn Surface
EndIf
EndProcedure
Procedure.d ObtenirHypothenuse_Triangle(*Auto._Triangle)
If *Auto\CoteA > 0
ProcedureReturn *Auto\CoteA
EndIf
EndProcedure
Procedure.d ObtenirPetitCote_Triangle(*Auto._Triangle)
If *Auto\CoteB > 0
ProcedureReturn *Auto\CoteB
EndIf
EndProcedure
Procedure.d ObtenirBase_Triangle(*Auto._Triangle)
If *Auto\CoteC > 0
ProcedureReturn *Auto\CoteC
EndIf
EndProcedure
Procedure.d ObtenirHauteur_Triangle(*Auto._Triangle)
If *Auto\Hauteur > 0
ProcedureReturn *Auto\Hauteur
EndIf
EndProcedure
Procedure.d ObtenirPerimetre_Triangle(*Auto._Triangle)
If *Auto\CoteA > 0 And *Auto\CoteB > 0 And *Auto\CoteC > 0
ProcedureReturn *Auto\CoteA + *Auto\CoteB + *Auto\CoteC
EndIf
EndProcedure
Procedure Detruire_Triangle(*Auto._Triangle)
;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
FreeMemory(*Auto)
EndProcedure
;-TABLES VIRTUELLES.
DataSection
TableVirtuelle_Carre:
Data.i @DefinirCote_Carre()
Data.i @ObtenirSurface_Carre()
Data.i @ObtenirCote_Carre()
Data.i @ObtenirDiagonale_Carre()
Data.i @ObtenirPerimetre_Carre()
Data.i @Detruire_Carre()
TableVirtuelle_Cercle:
Data.i @DefinirRayon_Cercle()
Data.i @ObtenirSurface_Cercle()
Data.i @ObtenirRayon_Cercle()
Data.i @ObtenirDiametre_Cercle()
Data.i @ObtenirPerimetre_Cercle()
Data.i @Detruire_Cercle()
TableVirtuelle_Rectangle:
Data.i @DefinirLongueur_Rectangle()
Data.i @DefinirLargeur_Rectangle()
Data.i @ObtenirSurface_Rectangle()
Data.i @ObtenirLongueur_Rectangle()
Data.i @ObtenirLargeur_Rectangle()
Data.i @ObtenirDiagonale_Rectangle()
Data.i @ObtenirPerimetre_Rectangle()
Data.i @Rectangle_EstCarre()
Data.i @Detruire_Rectangle()
TableVirtuelle_Anneau:
Data.i @DefinirDiametreExterne_Anneau()
Data.i @DefinirDiametreInterne_Anneau()
Data.i @ObtenirDiametreIntermediaire_Anneau()
Data.i @ObtenirSurface_Anneau()
Data.i @ObtenirLargeur_Anneau()
Data.i @Detruire_Anneau()
TableVirtuelle_TriangleRectangle:
Data.i @DefinirBase_TriangleRectangle()
Data.i @DefinirPetitCote_TriangleRectangle()
Data.i @ObtenirSurface_TriangleRectangle()
Data.i @ObtenirBase_TriangleRectangle()
Data.i @ObtenirPetitCote_TriangleRectangle()
Data.i @ObtenirHypothenuse_TriangleRectangle()
Data.i @ObtenirPerimetre_TriangleRectangle()
Data.i @Detruire_TriangleRectangle()
TableVirtuelle_Losange:
Data.i @DefinirCote_Losange()
Data.i @ObtenirCote_Losange()
Data.i @ObtenirSurface_Losange()
Data.i @ObtenirPerimetre_Losange()
Data.i @Detruire_Losange()
TableVirtuelle_Parallelogramme:
Data.i @DefinirLongueur_Parallelogramme()
Data.i @DefinirLargeur_Parallelogramme()
Data.i @ObtenirSurface_Parallelogramme()
Data.i @ObtenirLongueur_Parallelogramme()
Data.i @ObtenirLargeur_Parallelogramme()
Data.i @ObtenirPerimetre_Parallelogramme()
Data.i @Parallelogramme_EstLosange()
Data.i @Detruire_Parallelogramme()
TableVirtuelle_Trapeze:
Data.i @DefinirCote1_Trapeze()
Data.i @DefinirCote2_Trapeze()
Data.i @DefinirCote3_Trapeze()
Data.i @DefinirCote4_Trapeze()
Data.i @DefinirHauteur_Trapeze()
Data.i @ObtenirCote1_Trapeze()
Data.i @ObtenirCote2_Trapeze()
Data.i @ObtenirCote3_Trapeze()
Data.i @ObtenirCote4_Trapeze()
Data.i @ObtenirSurface_Trapeze()
Data.i @ObtenirHauteur_Trapeze()
Data.i @ObtenirPerimetre_Trapeze()
Data.i @ObtenirLongueur_Mediane_Trapeze()
Data.i @Detruire_Trapeze()
TableVirtuelle_Triangle:
Data.i @DefinirHypothenuse_Triangle()
Data.i @DefinirPetitCote_Triangle()
Data.i @DefinirBase_Triangle()
Data.i @DefinirHauteur_Triangle()
Data.i @ObtenirSurface_Triangle()
Data.i @ObtenirHypothenuse_Triangle()
Data.i @ObtenirPetitCote_Triangle()
Data.i @ObtenirBase_Triangle()
Data.i @ObtenirHauteur_Triangle()
Data.i @ObtenirPerimetre_Triangle()
Data.i @Detruire_Triangle()
TableVirtuelle_Polygone:
EndDataSection
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
Define T1.ObjetTriangleRectangle = CreerTriangleRectangle(3.0, 4.0)
Define T2.ObjetTriangle = CreerTriangle() ;par défaut
;Define *Inconnu.BaseObjet ; objet prédéfini toujours disponible
If T1 And T2
Debug "Base T1 = " + T1\Base()
Debug "Largeur T1 = " + T1\PetitCote()
Debug "Hypoténuse T1 = " + T1\Hypothenuse()
Debug "Perimetre T1 = " + T1\Perimetre()
Debug "Surface T1 = " + T1\Surface()
Debug ""
Debug "Longueur T2 = " + T2\CoteC()
Debug "Largeur T2 = " + T2\CoteB()
Debug "Hypoténuse T2 = " + T2\CoteA()
Debug "Hauteur T2 = " + T2\Hauteur()
Debug "Perimetre T2 = " + T2\Perimetre()
Debug "Surface T2 = " + T2\Surface()
Debug ""
Debug "Detruire T2"
T2\Detruire()
Debug "Detruire T1"
T1\Detruire()
Debug ""
EndIf
;Définir deux objets rectangle.
;Notez que nous déclarons chaque variable en fonction du type d'interface: "ObjetRectangle" dans ce cas
Define rect1.ObjetRectangle
Define rect2.ObjetRectangle
;Créer les deux objets. D'abord avec la longueur = 100 et la largeur = 10, et le second avec la longueur
;= 20 et la largeur = 20.
rect1 = CreerRectangle(100, 50)
rect2 = CreerRectangle(20, 20)
;Récupérer les longueurs, largeurs, surfaces, diagonales et si ce sont des carrés.
Define Longueur.d = rect1\Longueur()
Define Largeur.d = rect1\Largeur()
Debug "Le rectangle 1 à une longueur de " + Str(Longueur) + " unités, une largeur de " + Str(Largeur) +
" et une surface de " + Str(ObtenirSurface_Rectangle(rect1)) + " unités²."
Debug "Le rectangle 1 à une diagonale de " + StrD(ObtenirDiagonale_Rectangle(rect1), 2) + " unités"
If Rectangle_EstCarre(rect1)
Debug "Le rectangle 1 est carré"
Else
Debug "Le rectangle 1 n'est pas carré"
EndIf
Debug ""
Largeur.d = rect2\Largeur()
Longueur.d = rect2\Longueur()
Debug "Le rectangle 2 à une largeur de " + Str(Largeur) + " et une longueur de " + Str(Longueur) + " unités."
Debug "Le rectangle 2 à une diagonale de " + StrD(ObtenirDiagonale_Rectangle(rect2), 2) + " unités"
If Rectangle_EstCarre(rect2)
Debug "Le rectangle 2 est carré"
Else
Debug "Le rectangle 2 n'est pas carré"
EndIf
;Détruire les objets lorsque nous avons terminé.
Debug ""
Debug "Detruire rectangle 1 et 2"
rect1\Detruire()
rect2\Detruire()
CompilerEndIf
Code : Tout sélectionner
;Essai Classe Geometrie.pb
XIncludeFile "D:\Programmation\Prg Perso\P\POO\Classe Geometrie.pbi"
Enumeration Fenetres
#Fenetre_Geometrie
#Fenetre_Carre
#Fenetre_Cercle
#Fenetre_Rectangle
#Fenetre_Anneau
#Fenetre_TriangleR
#Fenetre_Losange
#Fenetre_Parallelogramme
#Fenetre_Trapeze
EndEnumeration
Enumeration Gadgets
#Str_cote_carre
#Str_Surface_carre
#Str_Diagonale_carre
#Str_perimetre_carre
#Str_perimetre_cercle
#Str_Rayon_cercle
#Str_Surface_Cercle
#Str_Diametre_Cercle
#Str_perimetre_Rectangle
#Str_Largeur_Rectangle
#Str_Longueur_Rectangle
#Str_Surface_rectangle
#Str_Diagonale_rectangle
#Str_DE
#Str_DI
#Str_DIn
#Str_La
#Str_SU
#Str_Epaisseur_Anneau
#Str_Base_TR
#Str_Hauteur_TR
#Str_Hypothenuse_TR
#Str_Perimetre_TR
#Str_Surface_TR
#TriangleRectangle
#Str_Cote_Losange
#Str_Surface_Losange
#Str_Perimetre_Losange
#Str_Longueur_Parallelogramme
#Str_Largeur_Parallelogramme
#Str_Hauteur_Parallelogramme
#Str_Surface_Parallelogramme
#Str_Perimetre_Parallelogramme
#Str_Cote_1_Trapeze
#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
#Btn_Carre
#Btn_Cercle
#Btn_Anneau
#Btn_Rectangle
#Btn_TR
#Btn_Losange
#Btn_Parallelogramme
#Btn_Trapeze
EndEnumeration
Global FontID1
Global FontID2
Global FontID3
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)
Global Carre.ObjetCarre, Cercle.ObjetCercle, Rectangle.ObjetRectangle, Anneau.ObjetAnneau,
TriangleRectangle.ObjetTriangleRectangle, Losange.ObjetLosange, Parallelogramme.ObjetParallelogramme, Trapeze.ObjetTrapeze
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
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
Procedure Ouvrir_Fenetre_Geometrie()
OpenWindow(#Fenetre_Geometrie, 380, 100, 470, 341, "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")
EndProcedure
Procedure Ouvrir_Fenetre_Carre()
If OpenWindow(#Fenetre_carre, 216, 0, 375, 399, "Calcule 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, FontID1)
StringGadget(#Str_Surface_carre, 130, 180, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_Surface_carre, FontID1)
StringGadget(#Str_Diagonale_carre, 130, 240, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_Diagonale_carre, FontID1)
StringGadget(#Str_perimetre_carre, 130, 300, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_perimetre_carre, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Carre))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(100, 30, "Carré")
DrawingFont(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
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, FontID1)
StringGadget(#Str_Surface_Cercle, 130, 210, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_Surface_Cercle, FontID1)
StringGadget(#Str_Diametre_Cercle, 130, 270, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_Diametre_Cercle, FontID1)
StringGadget(#Str_perimetre_cercle, 130, 330, 200, 40, "", #ES_RIGHT)
SetGadgetFont(#Str_perimetre_cercle, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Cercle))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(100, 30, "Cercle")
DrawingFont(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
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, 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, FontID1)
StringGadget(#Str_Surface_rectangle, 130, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Surface_rectangle, FontID1)
StringGadget(#Str_Diagonale_rectangle, 130, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Diagonale_rectangle, FontID1)
StringGadget(#Str_perimetre_Rectangle, 130, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_perimetre_Rectangle, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Rectangle))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(60, 30, "Rectangle")
DrawingFont(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
Procedure Ouvrir_Fenetre_Anneau()
If OpenWindow(#Fenetre_Anneau, 0, 0, 400, 420, "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, 150, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
For i = #Str_DE To #Str_SU
SetGadgetFont(i, FontID1)
Next
If StartDrawing(WindowOutput(#Fenetre_Anneau))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(100, 30, "Anneau")
DrawingFont(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
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, FontID1)
StringGadget(#Str_Hauteur_TR, 170, 180, 200, 40, "", #ES_RIGHT)
GadgetToolTip(#Str_Hauteur_TR, "Veuillez entrer la hauteur")
SetGadgetFont(#Str_Hauteur_TR, FontID1)
StringGadget(#Str_Hypothenuse_TR, 170, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Hypothenuse_TR, FontID1)
StringGadget(#Str_Surface_TR, 170, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Surface_TR, FontID1)
StringGadget(#Str_Perimetre_TR, 170, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Perimetre_TR, FontID1)
If StartDrawing(WindowOutput(#Fenetre_TriangleR))
BackColor(Point(0, 0))
DrawingFont(FontID3)
FrontColor(#Red)
DrawText(20, 30, "Triangle Rectangle")
DrawingFont(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
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, FontID1)
StringGadget(#Str_Surface_Losange, 170, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Surface_Losange, FontID1)
StringGadget(#Str_Perimetre_Losange, 170, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Perimetre_Losange, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Losange))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(60, 30, "Losange")
DrawingFont(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
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, 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, 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, FontID1)
StringGadget(#Str_Surface_Parallelogramme, 130, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Surface_Parallelogramme, FontID1)
StringGadget(#Str_Perimetre_Parallelogramme, 130, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Perimetre_Parallelogramme, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Parallelogramme))
BackColor(Point(0, 0))
DrawingFont(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
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, 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, 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, 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, FontID1)
StringGadget(#Str_Hauteur_Trapeze, 130, 360, 200, 40, "", #ES_RIGHT)
GadgetToolTip(#Str_Hauteur_Trapeze, "Veuillez entrer la hauteur")
SetGadgetFont(#Str_Hauteur_Trapeze, FontID1)
StringGadget(#Str_Longueur_Mediane_Trapeze, 130, 420, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Longueur_Mediane_Trapeze, FontID1)
StringGadget(#Str_Surface_Trapeze, 130, 480, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Surface_Trapeze, FontID1)
StringGadget(#Str_Perimetre_Trapeze, 130, 540, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
SetGadgetFont(#Str_Perimetre_Trapeze, FontID1)
If StartDrawing(WindowOutput(#Fenetre_Trapeze))
BackColor(Point(0, 0))
DrawingFont(FontID2)
FrontColor(#Red)
DrawText(80, 30, "Trapèze")
DrawingFont(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
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
Ouvrir_Fenetre_Carre()
Case #Btn_Cercle
Ouvrir_Fenetre_Cercle()
Case #Btn_Rectangle
Ouvrir_Fenetre_Rectangle()
Case #Btn_Anneau
Ouvrir_Fenetre_Anneau()
Case #Btn_TR
Ouvrir_Fenetre_TriangleRectangle()
Case #Btn_Losange
Ouvrir_Fenetre_Losange()
Case #Btn_Parallelogramme
Ouvrir_fenetre_Parallelogramme()
Case #Btn_Trapeze
Ouvrir_Fenetre_Trapeze()
;carré
Case #Str_cote_carre
If Val(GetGadgetText(#Str_cote_carre)) >= 0
Carre = CreerCarre(ValD(GetGadgetText(#Str_cote_carre)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_cote_carre)) <> 0.0
SetGadgetText(#Str_perimetre_carre, StrD(Carre\Perimetre()))
SetGadgetText(#Str_Surface_carre, StrD(Carre\Surface()))
SetGadgetText(#Str_Diagonale_carre, StrD(Carre\Diagonale()))
EndIf
EndIf
;cercle
Case #Str_Rayon_cercle
If Val(GetGadgetText(#Str_Rayon_cercle)) >= 0
Cercle = CreerCercle(ValD(GetGadgetText(#Str_Rayon_cercle)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_Rayon_cercle)) <> 0.0
SetGadgetText(#Str_Surface_Cercle,StrD(Cercle\Surface()))
SetGadgetText(#Str_Diametre_Cercle, StrD(Cercle\Diametre()))
SetGadgetText(#Str_perimetre_cercle, StrD(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(ValD(GetGadgetText(#Str_Longueur_Rectangle)),
ValD(GetGadgetText(#Str_Largeur_Rectangle)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_Largeur_Rectangle)) <> 0.0 And ValD(GetGadgetText(#Str_Longueur_Rectangle)) <> 0.0
Surface.s = StrD(Rectangle\Surface())
SetGadgetText(#Str_Surface_rectangle, Surface)
SetGadgetText(#Str_Diagonale_rectangle, StrD(Rectangle\Diagonale()))
SetGadgetText(#Str_perimetre_Rectangle, StrD(Rectangle\Perimetre()))
EndIf
EndIf
;anneau
Case #Str_DE,#Str_DI
If Val(GetGadgetText(#Str_DE)) >= 0 And Val(GetGadgetText(#Str_DI)) >= 0
Anneau = CreerAnneau(ValD(GetGadgetText(#Str_DI)), ValD(GetGadgetText(#Str_DE)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_DE)) <> 0.0 And ValD(GetGadgetText(#Str_DI)) <> 0.0
SetGadgetText(#Str_DIn,StrD(Anneau\DiametreIntermediaire()))
SetGadgetText(#Str_La,StrD(Anneau\Largeur()))
SetGadgetText(#Str_SU, StrD(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(ValD(GetGadgetText(#Str_Base_TR)),
ValD(GetGadgetText(#Str_Hauteur_TR)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_Base_TR)) <> 0.0 And ValD(GetGadgetText(#Str_Hauteur_TR)) <> 0.0
SetGadgetText(#Str_Hypothenuse_TR, StrD(TriangleRectangle\Hypothenuse()))
SetGadgetText(#Str_Surface_TR, StrD(TriangleRectangle\Surface()))
SetGadgetText(#Str_Perimetre_TR, StrD(TriangleRectangle\Perimetre()))
EndIf
EndIf
;losange
Case #Str_Cote_Losange
If Val(GetGadgetText(#Str_Cote_Losange)) >= 0
Losange = CreerLosange(ValD(GetGadgetText(#Str_Cote_Losange)))
checkFloatInput(EventGadget())
If ValD(GetGadgetText(#Str_Cote_Losange)) <> 0.0
SetGadgetText(#Str_Perimetre_Losange, StrD(Losange\Perimetre()))
SetGadgetText(#Str_Surface_Losange, StrD(Losange\Surface()))
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(ValD(GetGadgetText(#Str_Longueur_Parallelogramme)),
ValD(GetGadgetText(#Str_Largeur_Parallelogramme)),
ValD(GetGadgetText(#Str_Hauteur_Parallelogramme)))
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\Perimetre()))
SetGadgetText(#Str_Surface_Parallelogramme, StrD(Parallelogramme\Surface()))
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(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)))
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\Longueur_Mediane()))
SetGadgetText(#Str_Perimetre_Trapeze, StrD(Trapeze\Perimetre()))
SetGadgetText(#Str_Surface_Trapeze, StrD(Trapeze\Surface()))
EndIf
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()
EndSelect
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EndSelect
ForEver
End