V. Conversions et fonctions utilitaires▲
L'unité ConvUtils fournit plusieurs fonctions globales permettant de manipuler les données dont l'unité de mesure est recensée.
V-A. Opérations arithmétiques▲
function
ConvUnitAdd(const
AValue1: Double
; const
AType1: TConvType; const
AValue2: Double
; const
AType2, AResultType: TConvType): Double
;
Additionne deux mesures. On spécifie le type de mesure pour chacune des valeurs ainsi que le type de mesure du résultat.
function
ConvUnitDiff(const
AValue1: Double
; const
AType1: TConvType; const
AValue2: Double
; const
AType2, AResultType: TConvType): Double
;
Même chose, mais la fonction effectue une soustraction.
On peut citer également les fonctions ConvUnitInc et ConvUnitDec qui permettent d'incrémenter et de décrémenter une mesure dans le type de mesure spécifié.
V-B. Comparaisons et tests▲
function
ConvUnitWithinPrevious(const
AValue, ATest: Double
; const
AType: TConvType; const
AAmount: Double
; const
AAmountType: TConvType): Boolean
;
Permet de vérifier si la valeur AValue est inférieure à la valeur ATest d'au plus la valeur AAmount. Nous précisons au passage le type d'unité de mesure dans lequel les valeurs sont exprimées.
function
ConvUnitWithinNext(const
AValue, ATest: Double
; const
AType: TConvType; const
AAmount: Double
; const
AAmountType: TConvType): Boolean
;
Idem que pour ConvUnitWithinPrevious, mais on teste si AValue est supérieur à ATest.
function
ConvUnitCompareValue(const
AValue1: Double
; const
AType1: TConvType; const
AValue2: Double
; const
AType2: TConvType): TValueRelationship;
Compare deux valeurs, chacune spécifiée avec son unité de mesure respective (de la même famille), et renvoie un résultat de type TValueRelationship. TValueRelationship comporte 3 valeurs possibles :
- LessThanValue (= -1)
- EqualsValue (= 0)
- GreaterThanValue (=1)
function
ConvUnitSameValue(const
AValue1: Double
; const
AType1: TConvType; const
AValue2: Double
; const
AType2: TConvType): Boolean
;
Cette fonction est un peu plus basique que la précédente, car elle renvoie seulement true ou false selon que les deux valeurs passées en argument sont égales ou non.
function
CompatibleConversionTypes(const
AFrom, ATo: TConvType): Boolean
;
Vérifie si deux types font partie de la même famille. Cela permet d'éviter de demander une conversion qui échouerait en raison de cette incompatibilité.
V-C. Listes de familles et d'unités de mesure▲
procedure
GetConvTypes(const
AFamily: TConvFamily; out
ATypes: TconvTypeArray);
Récupère dans le paramètre ATypes la liste des types de mesure de la famille passée en paramètre (AFamily). TConvTypeArray est un tableau dynamique de TConvType soit un tableau d'entiers.
procedure
GetConvFamilies(out
AFamilies: TConvFamilyArray);
Récupère la liste des familles recensées dans une variable tableau dynamique.
V-D. Affichage numérique et textuel des mesures▲
function
StrToConvUnit(AText: string
; out
AType: TConvType): Double
;
Fonction intéressante qui permet de convertir une mesure exprimée textuellement en valeur de type TConvType. Par exemple :
StrToConvUnit('100 mètres'
, MonNouveauType)
parse la chaîne passée en paramètre et instancie un objet TConvType avec 'mètres' pour description et 100 pour valeur.
function
ConvUnitToStr(const
AValue: Double
; const
AType: TConvType): string
;
C'est l'inverse qui se produit : à partir un objet TConvtype passé en paramètre et une valeur, on obtient une chaîne descriptive. Exemple :
ConvUnitToStr(100
, duMeters)
renvoie ‘100 Mètres'
VI. Conclusion▲
Nous avons fait le tour du système de conversion d'unités de mesure sous Delphi 6, Kylix 2 et aussi, aurait-il fallu ajouter C++Builder 6 puisque, rappelons-le, ce dernier intègre la VCL (Visual Component Library), bibliothèque phare d'objets de Borland.
J'espère que vous aurez appris suffisamment d'éléments pour être capable d'intégrer vos systèmes de conversions dans vos applications. Si vous avez des questions, n'hésitez pas, et postez-les sur le forum Delphi de Developpez, tout le monde en profitera du coup.
Vous gagnerez un petit peu de temps en téléchargeant les sources ici.
Bon courage !