Types énumérés, intervalle et ensemble

L'objectif de ce court article est de vous donner un aperçu des types présentés dans le titre.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Zoom

Récemment, j'étais en train d'écrire une application graphique qui comporte un certain nombre de niveaux de zoom prédéfinis. Comme les valeurs de zoom sont connues à l'avance, au moment de la programmation, le recours à un type énuméré convient bien :

 
Sélectionnez
type 
  TZoom = (z800,z400,z200,z100,z50,z25,z10,z5);

À partir de là, on peut utiliser TZoom comme on emploie tout format scalaire tel que les entiers.
Comme indice de tableau :

 
Sélectionnez
const 
// coefficient de zoom en %  
  Facteur : array[TZoom] of integer = 
           (800, 400, 200, 100, 50, 25, 10, 5);

Ensuite, on parcourt ce tableau en utilisant low et high pour connaître les limites :

 
Sélectionnez
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éfini un type intervalle qui s'applique sur une partie de mon type énuméré :

 
Sélectionnez
type 
  TReduction = z100..z5;

Je peux alors travailler avec ce nouveau type intervalle comme avec l'ancien type énuméré :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

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.