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 :
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 :
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 :
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é :
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.