fabsys_s
Messages postés5Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention20 février 2008
-
20 févr. 2008 à 14:30
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
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
zwyx
Messages postés146Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention21 mars 2016 20 févr. 2008 à 14:56
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 :
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.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 févr. 2008 à 01:22
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;