Mise a jour d'un label dans un boucle [Résolu]

Signaler
Messages postés
5
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 février 2008
-
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
bonjour,

je cherche un moyen de mettre a jour plusieur label dans un boucle for, je m'explique

je vais charger des parametres a partir d'un fichier ini et je doit mettre a jour un tableau de type tpoint et plusieur label (avec ces valeurs charger):

  if (FileExists(ExtractFilePath(Application.ExeName)+'\config.ini')) then
  begin
      inifile := Tinifile.Create(ExtractFilePath(Application.ExeName)+'\config.ini');
      for a:=1 to nombres_points do
      begin
      x:=inifile.ReadString('Config','Pointx'+inttostr(a),x);
      y:=inifile.ReadString('Config','Pointy'+inttostr(a),y);
      pt.x:=strtoint(x);
      pt.y:=strtoint(y);
      TabPoint[a]:=pt;
      //lab.caption:=inttostr(pt.X)+'/'+inttostr(pt.Y);
      end;
      inifile.free;

voila le code tous est charger correctement dans le tableau mais je n'arrive pas a mettre a jour les label
 la ligne en question est:

lab.caption:=inttostr(pt.X)+'/'+inttostr(pt.Y);

 je doit mettre a jour les label 12 a 23 avc chaque valeur lue j'est essayer qque chose comme sa meme si je sait que je code n'est pas bon sa poura servir a illustrer ce que je veux faire

label+inttostr(a+12).caption:=inttostr(pt.X)+'/'+inttostr(pt.Y);

label+inttostr(a+12) => le label a mettre a jour

si vous avez une solution merci......

7 réponses

Messages postés
3815
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
4 août 2020
35
Salut,

TLabel(FindComponent('Label' + IntToStr(a+12))).Caption :=
  Format('%d / %d', [Pt.X, Pt.Y]);

 
@+
Cirec

<hr siz="" />
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Salut,

d'après ce que j'ai compris, x et y sont des String lues dans le ficier *.ini, par TIniFile.ReadString(const Section, Ident, Default: String): String;
Ensuite tu les convertis en Integer pour les affecter aux attributs de pt. Enfin, tu reconvertis ces attributs Integer en String pour les ajouter au Caption des Tlabel. Ca ne serait pas plus simple d'écrire directement :

  x := inifile.ReadString('Config', 'Pointx'+IntToStr(a), x);
  y := inifile.ReadString('Config', 'Pointy'+IntToStr(a), y);
  pt.x := StrToInt(x);
  pt.y := StrToInt(y);
  TabPoint[a] := pt;
  lab.Caption := x+#47+y;

ou alors: 

  x := inifile.ReadInteger('Config', 'Pointx'+IntToStr(a), x);
  y := inifile.ReadInteger('Config', 'Pointy'+IntToStr(a), y);
  pt.x := x;
  pt.y := y;
  TabPoint[a] := pt;
  lab.Caption := IntToStr(x)+#47+IntToStr(y);

Remarques :
- le caractère '/', code ASCII #47, code hexa $2F.
- TIniFile.ReadInteger(const Section, Ident: String; Default: Integer): Integer; retourne la valeur de la clé Ident de la section Section si c'est un entier valide, sinon, retourne Default.

Cordialement,

x := inifile.ReadString('Config', 'Pointx'+IntToStr(a), x); Mauvaise idée : elle oblige de vérifier que X peut bien etre transtyper en entier.

Le problème vient de la :


lab
.caption : Ca serait pas plutot Lab[Index ].Caption :=  ?
Messages postés
5
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 février 2008
1
merci beaucou a tous,

merci cirec sa repond exactement a ma question.

Fabsys
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Autant pour moi.
Au moins, j'aurai participé.
Bonne prog' à tous.

Un débutant en informatique croit que 1 kB vaut 1000 B.
Un habitué pense que 1 km vaut 1024 m.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
@zwyx

L'important est de participer.  :)))

Une remarque :

Normalement, d'après le SI 
1 Ko  = 1000 octets
et
1 Kio = 1024 octets.

http://fr.wikipedia.org/wiki/Kiloctet
Mais tout le monde s'en fout...   
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
uses IniFiles, StdCtrls;

const
  PointsMax = 1000;

procedure TForm1.FormCreate(Sender: TObject);
var astr,
    FileName : string;
    a  : integer;
    pt : ^TPoint;
    TabPoints : array[0..PointsMax-1] of TPoint;
    Lbl : TLabel;
begin
  // on le fait qu'une seule fois, plus simple :)
  FileName := ExtractFilePath(Application.ExeName)+'\config.ini';

  if FileExists(FileName) then
  begin
    // pas besoin de variable pour inifile ...
    // un simple with ... do try ... finally ... end;
    with Tinifile.Create(FileName) do
    try
      // et un pointeur, un!
      pt := @TabPoints[0];

      // on devrait toujours commencer les tableaux a 0!
      for a := 0 to PointsMax-1 do
      begin
        // on le fait qu'une seule fois aussi!
        astr  := IntToStr(a+1);

        // ReadInteger c'est quand même mieux!
        pt^.X := ReadInteger('Config', 'Pointx'+astr, 0);
        pt^.Y := ReadInteger('Config', 'Pointy'+astr, 0);

        // On cherche
        Lbl   := TLabel(FindComponent('lab'+astr));

        // on verifie
        if Assigned(lbl) then
          // et on affiche, une liste ce serait quand même mieux!
          Lbl.Caption := format('pouint'+astr+' : %d / %d',[pt^.X, pt^.Y]);

        // on oublie pas d'incrementer le pointeur sinon on reste a 0!
        inc(pt);
      end;
    finally
      // finally assure que Free serat bien executé même en cas de problemes...
      Free;
    end;
  end;
end;







<hr size="2" width="100%" />


http://deefaze.gnomz.com