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
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 :
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.
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;