Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 15 déc. 2005 à 23:06
Salut,
si CheckBox1 et CheckBox2 doivent mutuellement s'éxclure tu peux utiliser à la place des RadioButtons qui ont ce genre de comportement d'office à la seul condition qu'ils aient le même parent. Si tu veux absolument conserver tes CheckBoxs dans ce cas c'est la methode de jlen qu'il faut appliquer
ps: si tu entends par activer & désactiver d'éviter que l'utilisateur final puisse cliquer sur CheckBox2 quand CheckBox1 est actif dans ce cas il faut faire ceci:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
checkbox2.Enabled:=false;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 15 déc. 2005 à 23:18
aprés c'est logique on ta donner que le code pour que quand tu cliques sur CheckBox1 la CheckBox2 se décoche pour que l'inverse fonctionne aussi il faut rajouté ceci:
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
checkbox1.Checked:=false;
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 16 déc. 2005 à 13:26
Cirec est fatigué!
utilisation de l'operateur logique (ou operateur booleen) NOT (non) :
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
checkbox1.Checked := NOT checkbox2.Checked;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
checkbox2.Checked := NOT checkbox1.Checked;
end;
explication pour dxh :
l'operateur NOT renvois l'inverse d'une valeur booléene
NOT True = False
NOT False = True
logique!
Les autres operateurs tel OR (ou), AND (et), XOR (ou exclusif) peuvent egalement etre appliquer aux operations booléene, d'ou leur nom d'operateurs booléen.
NOT True False (0 1)NOT False True (1 0)
True OR True True (1 1 1)True OR False True (1 0 1)False OR False False (0 0 0)
True XOR True False (1 1 0)True XOR False True (1 0 1)False XOR False False (0 0 0)
True AND True True (1 1 1)True AND False False (1 0 0)False AND False False (0 0 0)
Retiens bien cela car c'est trés utile et important de le savoir.
Cela evite de créer des cascade de "If Then Else" ou de "Case Of".
Tu peux manipuler aussi bien les variables que les constantes ou fonction a partir du moment ou elle renvois un type Boolean.
Si tu maitrise bien les operateurs booléen, tes programmes seront plus simple et surtout plus performant car il existe peu de cas de mauvaise utilisation de ces operateurs (contrairement aux pointeurs ou aux boucles ou aux conditions).
Maintenant tu vas pouvoir souvent utiliser l'operateur NOT dans divers programme.
Il s'avere trés utile pour "swaper" (inverser) la valeur d'un booléen.
la ou on aurait pu ecrire (inverse la valeur d'une variable) :
procedure TForm1.Button1Click;
begin
case VARBOOL of
True : VARBOOL := False;
False: VARBOOL := True;
end;
end;
on peu simplement Ecrire :
procedure TForm1.Button1Click;
begin
VARBOOL := NOT VARBOOL;
end;
A l'identique, on peu traiter toutes les propriétés booléene des composants de cette façon, Enbled, Checked, Visible, Tabstop ect... ect...
On peu egalement verifier si toutes les options (checkbox) d'un ensemble sont coché ou non et traiter en fonction du resultat (trés pratique pour verifier si un formulaire est remplis, vallable aussi pour le Web en PHP ou Javascript) :
ToutEstRemplis := checkbox1.checked AND checkbox2.checked AND checkbox3.checked;
if ToutEstRemplis then
PasserALaPageSuivante
else
ShowMessage('vous devez cocher les 3 options');
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 16 déc. 2005 à 13:37
Salut f0xi,
oui c'est vrai je suis fatigué très très fatiqué
mais je lui ai donné un autre methode en privé (mail) bien plus simple (une seul procedure) à mettre en oeuvre et qui fonctionne peut importe le nombre de checkbox présent sur la form et comme c'est un débutant je ne voulais pas "l'embrouiller" avec les opérateurs logiques mais tu as parfaitement raison de souligner la chose
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 16 déc. 2005 à 20:57
arf fallait pas poster en PV ... ça peu toujours etre interressant de voir diverses methodes sur des truc aussi "con" si je puis dire.
Et pour ce qui est de l'embrouiller avec les OPL, je pense que c'est une base a apprendre dés le depart. au moins pour partir du bon pied.
Et qu'il est aussi important, de savoir les manipuler, que de faire des IF, For, While ect... vus qu'ils sont massivement utilisés dans les conditions.
Car souvent on fait des methodes super lourde sur quelques variables booléene parce qu'on ne pense pas ou qu'on ne connais tout simplement pas les operateurs logique. ce qui est bien dommage.
donc n'ayons pas peur d'embrouiller les debutants avec des mecanismes de bases, en pensant bien que, meme si ils mettent un moment a bien comprendre et assimiler le mecanisme, ce dernier leurs faciliteras la vie et leur permettras d'ecrire plus vite et mieux leurs programme.
Y'a pas si longtemps, je faisait encore "ce qu'il ne faut pas faire" et quand je me suis rendus compte que je pouvais placer les OPL dans mes operations booléene, ma premiere reaction a ete de m'auto-insulter de "gros con" pour n'y avoir jamais penser. Et que si je l'avais sus plus tot, ça m'aurais bien aider.
un peu comme la declaration initialisation d'une variable globale ... ça m'aurait eviter d'utiliser les CTA dans 90% de mes prog.
enfin bref ... pourrait on avoir ta procedure mister Cirec ?
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 16 déc. 2005 à 21:15
Bon alors voici un copié collé du message que j'ai envoyé à dxh_master
voilà pour 5 CheckBox sur une form numérotées de 1 à 5
tu double cliques dans l'inspecteur d'objet sur CheckBox1 OnMouseDown ce qui va t'ajouter la procédure suivante:
procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
end;
que tu complètes comme ceci:
procedure TForm1.CheckBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var i : Integer;
begin
For I := 1 to 5 do
With TCheckBox(FindComponent('CheckBox' + IntToStr(I))) Do
checked := False;
end;
et tu ajoutes aux 4 autres CheckBox (toujours dans l'inspecteur d'objet) dans l'evenement OnMouseDown la même procedure en cliquant sur la petite flèche sur la droite qui t'ouvres la dropdownlist qui contient les procédure similaires déjà déclarer et c'est tout
en suite tu testes
à chaque clique sur une des CheckBox les autres se "décheck"
voilà mais sur ce coup là je ne pense pas t'apprendre quelques chose
ps : j'aimerai que tu jettes un nouveau coup d'oeil sur ma source de trie pour avoir ton avis par rapport aux nouveaux commentaires de florenth, on a une discution avec avis patagé (ce qui est en soit très bien) mais un avis exterieur serait le bien venu