Types énumérés, intervalle et ensemble
Date de publication :
24/11/2001
Date de mise a jour :
24/11/2001
Par
Eric SIBERT (Site)
L'objectif de ce court article est de vous donnez un aperçu des types présentés dans le titre.
Récemment, j'étais en train d'écrire une application graphique qui comporte un certain nombre de niveau de zoom prédéfinis. Comme les valeurs de zoom sont connues à l'avance, au moment de la programmation, le recours a un type énuméré convient bien :
type
TZoom = (z800,z400,z200,z100,z50,z25,z10,z5);
A partir de là, on peut utiliser TZoom comme on emploie tout format scalaire tel que les entiers.
Comme indice de tableau :
const
Facteur : array[TZoom] of integer =
(800, 400, 200, 100, 50, 25, 10, 5);
Ensuite, on peut parcours ce tableau en utilisant low et high pour connaître les limites :
var
Reduc : TZoom;
Largeur : integer;
begin
for Reduc:=low(TZoom) to high(TZoom) do
begin
Largeur:=Facteur[Reduc] * Cote;
...
Mais ensuite, j'ai voulu faire des traitements particuliers pour les facteurs de zoom inférieurs ou égaux à 100%. Pour ceci, j'ai définie un type intervalle qui s'applique sur une partie de mon type énuméré :
type
TReduction = z100..z5;
Je peux alors travailler avec ce nouveau type intervalle comme avec l'ancien type énuméré :
var
fImage : array[TReduction] of TMozaic;
Reduc : TReduction;
Largeur : integer;
begin
for Reduc:=low(TReduction) to high(TReduction) do
begin
Largeur:=Facteur[Reduc] * Cote;
fImage[Reduc]:=TMozaic.Create;
...
Mais il me restait un dernier problème. Comment déterminer, pour un facteur de zoom donné, s'il fait partie de l'intervalle de TReduction? Ou encore, s'il fait partie de l'ensemble des valeurs possible de TReduction?
Première méthode, vous vérifiez que votre variable est située entre les extrèmes de TReduction :
procedure Dessine (Zoom : TZoom);
begin
if Zoom in [low(TReduction)..high(Treduction)] then
...
Et si vous voulez faire plus propre, en particulier si vous devez réaliser le test plusieurs fois, définissez un ensemble qui contient toutes les valeurs de TReduction :
type
TEnsembleReduction = set of TReduction;
const
EnsembleReduction : TEnsembleReduction = [low(TReduction)..high(TReduction)];
Ensuite, il ne reste plus qu'à tester si la variable appartient à l'ensemble :
procedure Dessine (Zoom : TZoom);
begin
if Zoom in EnsembleReduction then
...
Voilà, j'espère que cet aperçu vous a intéressé. Si vous voulez aller plus loin, l'aide en ligne de Delphi constitue une bonne source. Vous devrez en particulier consulter la "Référence Pascal Objet" et les rubriques "Types scalaires" et suivantes. Pour une lecture au format papier, soit vous disposez du guide Pascal Objet, soit vous le retrouvez au format pdf sur le CD de Delphi.
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|