Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS DELPHI F.A.Q DELPHI TUTORIELS DELPHI LIVRES COMPOSANTS SOURCES DEFI TELECHARGEZ DELPHI TV

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 // coefficient de zoom en % 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.


Liste de mes articles :
Types énumérés, intervalle et ensemble
MMX avec Delphi 6 / Kylix
Préchargement de données dans le cache
MMX ( 2 ) avec Delphi 6 / Kylix
Instructions SIMD sur les réels
Internationaliser un projet Delphi
Installer D6 sous Windows 95
Tramage d'une image
Coder le PNG soi-même
Utiliser LibTiff avec Delphi
Ecrire une UDF FireBird avec Kylix


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.
Responsables bénévoles de la rubrique Delphi : Nono40 et Pedro - Contacter par EMail :
Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.