cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
14 juil. 2010 à 14:54
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
15 juil. 2010 à 11:49
Bonjour!
voilà, j' ai un souci d' écriture ...
A l' image de ce que l' on fait avec une variable de type "Set of":
if goColumnResize in DBGrid1.Options
then beep;
Je voudrais tester si "Valeur1" (de type Word) est comprise dans "Valeurs" (de type Word):
Disons que j' ai 4 constantes:
Valeur1 = 1;
Valeur2 = 2;
Valeur3 = 4;
Valeur4 = 8;
et que j' ai "Valeurs" représentant donc la somme d' un regroupement de Valeur1 à Valeur4.
Disons que Valeurs = 5:
Valeurs est donc représenté par Valeur3 + Valeur1.
Je voudrais donc écrire quelque chose dans ce genre :
if valeur3 in valeurs then Beep;
Je voudrais savoir s' il existe quelques chose pour faire cela ^^
Merci de votre aide,
Mauricio
A voir également:
Determiner "Valeur1 in valeurs" lorsque Valeur1 et Valeurs sont de type Word ...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 14 juil. 2010 à 16:14
où encore:
[hr] if (Valeurs and (Valeur1 or Valeur3)) = (Valeur1 or Valeur3) [b]then
/bShowMessage( 'Valeur1 && Valeur3 présents');
[hr]à toi de voir ce qui t'arrange
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 14 juil. 2010 à 16:24
Salut Cirec,
c' est exactement ça! J' ai déjà vu ça mais je n' arrivais pas à me rappeler, merci beaucoup!!!
J' allais partir sur une fonction mais là, c' est beaucoup mieux
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 15 juil. 2010 à 03:40
De façon générale, on peut voir un nombre comme un vecteur binaire, où chaque bit représente une information particulière. Une propriété intéressante du système binaire fait qu'il est très simple de décider si tel ou tel nombre est contenu dans tel autre nombre sous la loi d'addition.
Donc oui, de façon générale, si B and A <> 0, alors A est compris dans B.
Cordialement, Bacterius !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 15 juil. 2010 à 11:49
[quote= Bacterius]B and A = A excuse ... B and A <> 0 fonctionne quand on vérifie un seul bit
/quote en fait ça fonctionne pour les deux.
la plupart des Dev utilisent "B and A > 0" mais je trouve que c'est plus parlant quand on relis un code :"if (B and A) = A then"
que "if (B and A) <> 0 then"
sinon avec cette méthode on peut (par exemple) stocker 32 valeurs Boolean dans un entier non signé.
Les composants sont "Tagés" de 0 à 31 (Maximum):
[hr] function Tfrm_Main.GetCheckedComponents: Cardinal;
[b]var
/bIdx: Integer;
[b]begin
/bResult : = 0;
for Idx := 0 to ComponentCount - 1 [b]do
if /bComponents[Idx] is TCheckBox [b]then
begin
with /bTCheckBox(Components[Idx]) [b]do
if /bChecked [b]then
/bResult : = Result or (1 shl Tag);
[b]end
else if /bComponents[Idx] is TRadioButton [b]then
begin
with /bTRadioButton(Components[Idx]) [b]do
if /bChecked [b]then
/bResult := Result or (1 shl Tag);
end;
end;
// la récupération des Valeurs se fait comme ceci:
procedure Tfrm_Main.SetCheckedComponents(Value: Cardinal);
[b]var
/bIdx: Integer;
[b]begin
for /bIdx : = 0 to ComponentCount - 1 [b]do
if /bComponents[Idx] is TCheckBox [b]then
begin
with /bTCheckBox(Components[Idx]) [b]do
/bChecked := (Value and (1 shl Tag)) > 0;
[b]end
else if /bComponents[Idx] is TRadioButton [b]then
begin
with /bTRadioButton(Components[Idx]) [b]do
/bChecked : = (Value and (1 shl Tag)) > 0;
[b]end
end/b;
[hr]