Utiliser les cas en delphi

Résolu
cs_saravana
Messages postés
91
Date d'inscription
vendredi 25 mars 2005
Statut
Membre
Dernière intervention
18 octobre 2007
- 2 avril 2006 à 18:13
Bacterius
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
- 22 mars 2008 à 13:11
comment fait on pour utiliser la fonction case of... avec 3 cas, est il possible d'utiliser ces cas a la place d'un notifyevent(ex:button1.onclick:=1 et button2.onclick:=2)
merci bye;

9 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
3 avril 2006 à 00:25
non non non non non et NON!

Case n'est pas une instruction de condition! c'est un switch! grosse difference!

IF ... THEN, WHILE ... DO, REPEAT ... UNTIL

ça ce sont des instructions conditionnelle attendant donc un retour Booléen (true ou false).

CASE .. OF determine un choix a selectionner (switch) selon un retour ordinal.
une valeur Ordinal est un chiffre allant de 0 a 255 (byte, char).
Case .. Of accepte egalement les ensembles et les types enumérés, car delphi les tris de maniere ordinale egalement.

par exemple :

j'ai une valeure entiere allant de 0 a 12.
selon ces valeurs je veux determiner des cas bien particulier.

plutot que d'ecrire des conditions (a retour booléen) j'ecrirais donc un switch (case) de cette maniere :

Case I of
0: {pour la valeur 0 : code}
1: begin {pour la valeur 1 code} end;
2,4: if {pour les valeurs 2 et 4 condition} then begin {et code} end;
3: {pour la valeur 3 code}
5..12: {pour les valeurs de 5 a 12 : code}
end;

avec les types enumérés et ensemble je peu egalement ecrire :

case Brush.Style of
bsClear : {code};
bsSolid : {code};
end;

et pour les caracteres :

case Ch of
'a'..'z' : {code pour les lettres de 'a' a 'z'};
'A'..'Z' : {code pour les lettres de 'A' a 'Z'};
'0'..'9' : {code pour les lettres de '0' a '9'};
'.',',' : {code pour les caracteres '.' et ','};
end;

a bien retenir, CASE n'est pas une condition, mais une selection.

sous PHP et C,C++ il existe egalement cette selection sous la denomination "switch" et fonctionant de la meme maniere que l'instruction CASE .. OF du pascal.

l'instruction ELSE presente dans l'instruction CASE ne correspond pas vraiment au meme ELSE qu'une instruction IF..THEN.
Dans IF..THEN, ELSE correspond a SINON.
Dans un CASE .. OF, il serait plus approchant du "Pour les autres choix non cités". bien sur, pour en faciliter la lecture et l'ecriture ELSE a ete utilisé.
C'est d'ailleur souvent pour cela qu'on confond le switch CASE..OF avec une condition booléene.

donc bien que l'exemple d'elguevel soit bon en tout point, il a comis une petite erreur en ecrivant "Case (condition) of" ...
il aurait du ecrire "Case (variable ordinale) of"

il serait faux d'ecrire :

case X = 2 of

par contre, comme un booléen peu etre considéré comme une valeur ordinale on peut donc switcher le retour et donc une condition peut etre mise sous cette forme :

case (x = 2) of
true :
false:
end;

mais un tel code n'est pas propre. on eviteras toujours de "switcher" un booléen, mieux vaut passer cette condition dans un if..then :

if (x = 2) then begin
end else begin
end;

bien qu'en assembleur le nombre d'instructions soit identique pour un if sur booléen ou un case sur booléen...
mais par soucis de convention, on passeras les booléens dans les conditions a retour booléen et les ordinaux dans les switchs.

voila.

3