Simplifier

Résolu
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009 - 28 févr. 2009 à 16:34
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009 - 1 mars 2009 à 20:27
bonjour,
j'aimerai simplifier ces quelque ligne:

  BitBtn_S1.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S2.Glyph.LoadFromFile(MonChemin+'image\lave_linge_mouse_S.bmp');
  BitBtn_S3.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S4.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S5.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S6.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S7.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_S8.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné_S.bmp');
  BitBtn_M1.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');
  BitBtn_M2.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');
  BitBtn_M3.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');
  BitBtn_M4.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');
  BitBtn_M5.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');
  BitBtn_M6.Glyph.LoadFromFile(MonChemin+'image\lave_linge_deselctioné.bmp');

   comme vous pouvez le voir j'ai utiliser des BitBtn. et ces Bitbtn sont dans un panel.
je voudrai savoir si il est possible de faire quelque chose qui ressemble a:

with panel1
do ...

iut cachan
GEII

14 réponses

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 mars 2009 à 01:52
Tu peux peut être penser à utiliser un TToolBar ...
tu pourras faires des choses du genre à ca :
const
  MON_IMAGE = '\MonImage.bmp';
procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i:=0 to ToolBar1.ButtonCount-1 do begin
    with ToolBar1.Buttons[i] do
    begin
      Caption := 'Boutton n'+IntToStr(i);
      // MON_IMAGE = chemin de ton Image ...
      ImageIndex := MON_IMAGE;
    end;
  end;
end;
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2009 à 12:41
salut,

il y a plus simple ...

tu as deux images a afficher, d'après ton exemple, donc il suffit de donner une valeur au "Tag" des TBitBtn afin de pouvoir les différencier.

chez toi c'est très simple il n'y en a qu'un à changer
(par l'inspecteur d'objets):
BitBtn_S2.Tag := 1;
tous les autres étant à zéro par défaut.

procedure TForm1.Button4Click(Sender: TObject);
var I : Integer;
begin
  with panel1 do
    for I := 0 to ControlCount - 1 do
      if (controls[I] is TBitBtn) then
      with TBitBtn(Controls[I]) do
      case Tag of
        0 : Glyph.LoadFromFile('image\lave_linge_deselctioné.bmp');
        1 : Glyph.LoadFromFile('image\lave_linge_mouse_S.bmp');
      end;
end;

mais l'utilisation d'un TImageList reste fortement conseillé pour ton cas
 
@+
Cirec

<hr siz="" />
3
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009
28 févr. 2009 à 16:47
mercii pour vos réponse.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
1 mars 2009 à 00:21
Salut,

Tu veux dire que tu voudrais avoir un code plus concis et plus difficile à lire en compliquant le boulot de l'exe..?

C'est ça? 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 mars 2009 à 01:54
Pardon ,
tu dois bien sur utiliser un TImageList avec , petite erreur ,

donc ce n'est pas  ImageIndex := MON_IMAGE; mais
ImageIndex := IndexDansLeTImageListAUtiliser;

désolé , utilise l'aide pour plus d'infos
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
1 mars 2009 à 13:09
Moi, je ne trouve pas ça plus simple ni plus facile à lire. Au contraire.
Et question perf' on perd bcp.
J'dis pas, si y'avait 150 TBitBtn...
Ca fait plus pro, c'est sûr. Mais une fois compilé, ça ne sera pas plus simple non plus. 

Quant au TImageList, si on ne veut pas donner la possibilité à l'utilisateur de changer les Bitmaps, c'est le bon choix. 
0
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 13:18
merci pour ta solution cirec.

caribensila : pour mon cas j ai 15 TBitBtn ... mais dans un futur il pourai y en avoir jusqu'a 25.

iut cachan
GEII
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2009 à 13:30
quand je dis plus simple c'est en comparaison avec l'utilisation d'une ToolBar (pas de composants à ajouter à la fiche)

ensuite en matière de perfs ... je dis ...attention ... ce n'est pas un FindComponent !!!
on ne parse que les Contrôles contenu dans Panel1 !!!!

FindComponent rajoute une couche puisqu'il effectue encore un contrôle de concordance du nom de l'objet recherché.

et pour finir lire ce genre de code ne pose pas plus de problème que le code d'exemple fournit par tartave

 
@+
Cirec

<hr siz="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2009 à 13:31
ah oui j'ai oublié le plus important :
je répond exactement à la demande de tartave
 
@+
Cirec

<hr siz="" />
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
1 mars 2009 à 13:38
... Je critique pas, Cirec.  :)
Je dis que c'est un choix. C'est tout.
Mais je ne suis quand même pas très convaincu du bien-fondé... ;)
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2009 à 13:49
pas de soucis
"... Je critique pas, Cirec.  :)
Je dis que c'est un choix. C'est tout."
j'argumentai juste mon point de vue
"Mais je ne suis quand même pas très convaincu du bien-fondé... ;)"
mais c'est ton droit

 
@+
Cirec

<hr siz="" />
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
1 mars 2009 à 14:14
sympa cirec , je ne connaissais pas ...
Merci
Puis je trouve que cet un bon exemple d'utilisation du Tag (on peut vraiment faire ce qu'on veut avec ca )
0
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 14:54
J'ai opter pour la solution de cirec qui ma fait découvrir le tag.

Dans mon cas j ai que une seul image qui change, celle où l'utilisateur à clicé sur le TBitBtn. Et les autre sont soir des Small ou Medium.
Donc j affecte le tag à 0 a toutes les Small et le tag 2 a toutes les Medium.
Enssuite lorsque l'utilisateur clic sur un TBitBtn j affect le tag 1 ou 3 (si il est Small ou Medium). est apré chargement des images je remet le tag à 0 ou 2.

mon code :

const
  Deselect_S= 'picture\washMachine_Deselect_S.bmp';  // merci nicolas ^^
  Deselect_M= 'picture\WashMachine_Deselect_M.bmp';
  Mouse_S='picture\WashMachine_Mouse_S.bmp';
  Mouse_M='picture\WashMachine_Mouse_M.bmp';
  WashMachine_S='picture\WashMachine_S.bmp';
  WashMachine_M='picture\WashMachine_M.bmp';

procedure TMainForm.BitBtn_S1Click(Sender: TObject); // cette procedure est réalisé pour les 15 BitBtn
var I : Integer;
begin
 BitBtn_S1.Tag:=1; 
         with panel1 do
           for I := 0 to ControlCount - 1 do
             if (controls[I] is TBitBtn) then
               with TBitBtn(Controls[I]) do
                  case Tag of
                     0 : Glyph.LoadFromFile(Deselect_S);
                     1 : Glyph.LoadFromFile(Mouse_S);
                     2 : Glyph.LoadFromFile(Deselect_M);
                     3 : Glyph.LoadFromFile(Mouse_M);
                  end;
                  BitBtn_S1.Tag:=0; // remet le tag a ca position initial
 end;

merci à vous tous

Tartave
0
tartave Messages postés 15 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 20:27
derniere question serai t'il possible d'inclure le code de cirec dans une function ?
code:
         with panel1 do
           for I := 0 to ControlCount - 1 do
             if (controls[I] is TBitBtn) then
               with TBitBtn(Controls[I]) do
                  case Tag of
                     0 : Glyph.LoadFromFile(Deselect_S);
                     1 : Glyph.LoadFromFile(Mouse_S);
                     2 : Glyph.LoadFromFile(Deselect_M);
                     3 : Glyph.LoadFromFile(Mouse_M);
                  end;

tartave.
0
Rejoignez-nous