Simplification du code

cs_dk Messages postés 20 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 19 mai 2006 - 2 janv. 2004 à 21:50
cs_dk Messages postés 20 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 19 mai 2006 - 4 janv. 2004 à 23:57
voila je sais que parfois on peut fortement simplifier son code grace par exemple a la propriete (sender as T...)
mais par exemple si g ,lors d'un clik sur un button, bcp d'element a desactiver, par exemple 9 radiobutton numeroté de 1->9. Au lieu de mettre:

radiobutton1.visible:=false; radiobutton2.visible:=false;
radiobutton3.visible:=false; ...

N'y a til pas une astuce du style:
radiobutton(all).enabled:=false ou a la rigueur un truc comme

for i:=1 to 9 do begin
radiobutton[i].enabled:=false;
i:=i+1;
end;

merci d'avance pour votre aide,
dk2089

4 réponses

yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
3 janv. 2004 à 03:20
avec des "buttons"

var x:Integer;
begin
for x:=0 to ComponentCount-1 do//test tout
begin
if(Components[x].ClassType=TButton)then Sender:=Components[x];
(Sender as TButton).Enabled:=false;
(Sender as TButton).Visible:=false;
(Sender as TButton).Left:=5;
end;
end;

ou si on connait le nom et que l'on souhaite plus de précision
if(Components[x].Name='bouton1')or
(Components[x].Name='bouton2')or ....

yve
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 janv. 2004 à 09:16
Attention à l'utilisation détournée du paramètre Sender !...

Autre formule proposée, non basée sur des comparaisons de chaines, ce qui accélère un peu le traitement :
var
  i: integer;
  RB: TComponent;
begin
  for i:= 1 to 9 do
  begin
    RB := FindComponent('RadioButton' + IntToStr(i));
    if RB <> nil then
      TRadioButton(RB).Enabled := False;
  end;
end;

May Delphi be with you
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 janv. 2004 à 09:18
DK :
Je n'avais pas fait attention au premier passage mais le code suivant risque fort de provoquer quelques surprises :

for i:=1 to 9 do begin 
radiobutton[i].enabled:=false;
i:=i+1;
end;



Si tu changes la valeur de i dans une boucle For, gare aux désagréments ! ?-)
May Delphi be with you
0
cs_dk Messages postés 20 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 19 mai 2006
4 janv. 2004 à 23:57
toujours dans un esprit de simplification de code, je me demandais comment faire pour creer une procedure qui serait appelée de cette maniere:

remisecaption();

et cette procedur contiendrait un code du genre

radiobutton1.caption:='email';
radiobutton2.caption:='telephone';
...
radiobutton15.caption:='adresse';

mais quand j'essaye de creer une prodedure de ce genre, lors de la compilation il me dit que radiobutton1 n'est pas un identifiant valable, pareille pour tous les radiobuttons utilise ceci du au fait qu'ils sont po declarer....
alors comment dois je arranger les bidons???

et tant que j'y suis j'aimerais creer le meme genre de procedure mais ou on passerait la valeur true ou false pour avoir un resultat de ce style

buttonagelol(true);
//qui a pour effet
radiobutton1.enbled:=true;
...
radiobutton10.enbled:=true;

merci d'avance pour votre aide
dk2089
0
Rejoignez-nous