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

Messages postés
5
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 février 2008
- - Dernière réponse : f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
- 21 févr. 2008 à 01:22
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......
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
33
3
Merci
Salut,

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

 
@+
Cirec

<hr siz="" />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
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,
Commenter la réponse de zwyx
0
Merci
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 :=  ?
Commenter la réponse de Utilisateur anonyme
Messages postés
5
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
20 février 2008
1
0
Merci
merci beaucou a tous,

merci cirec sa repond exactement a ma question.

Fabsys
Commenter la réponse de fabsys_s
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
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.
Commenter la réponse de zwyx
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
@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...   
Commenter la réponse de Caribensila
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
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
Commenter la réponse de f0xi