StringList.AddObject

Résolu
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 - 12 déc. 2017 à 11:02
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 - 12 déc. 2017 à 19:10
Bonjour,
j'ai un problème avec ce code
SavImage      := TSavImage.Create;
//ThumbItemsList.OwnsObjects := True;
for I := 0 to ThumbList.Count - 1 do
begin
msThumbStream.Seek(0, soFromBeginning); // on se repositionne au début

msThumbStream.Position := strtoint(ThumbList.Strings[I]);
msThumbStream.Seek(msThumbStream.Position - 1, soFromBeginning);

begin
JPG := tJpegImage.Create;
// SavImage.Img := tJpegImage.Create;
try
JPG.LoadFromStream(msThumbStream);

SavImage.Index := I;
SavImage.Img := JPG;
SavImage.Name := IntToStr(I) + '.jpg';
// JPG.SaveToFile(SavImage.Name); //ok ça marche
except
// pour suivre les exceptions .
// ShowMessage('Erreur dans ThumbSearch.Create(ADirectory: string) index = '+IntToStr(i));
end;

JPG.Free;
end;

ThumbItemsList.AddObject(SavImage.Name, SavImage) ; //ne marche pas
end;

si je fait
 JPG.SaveToFile(SavImage.Name); 
mes images se sauvegardent normalement
donc elles existent bien ,mais c'est pas ce que je cherche .Je voudrais les mettre dans une stringlist pour les rappeler à la demande .
En faisant du pas a pas je me rend compte que AddObject ajoute bien "apparemment" les éléments.
je lis la liste avec

ChercheJPG.GetInfoList(i , TimgInfo);
procedure ThumbSearch.GetInfoList(Index: integer; out ThumbInfo: TSavImage);
begin
if (Index >= 0) and (Index < ThumbItemsList.Count) then
ThumbInfo := (ThumbItemsList.Objects[Index] as TSavImage);
end;

Et là la liste me retourne toujours quelque soit l'index ,le dernier enregistrement fait.
autrement dit la liste contient x fois le dernier enregistrement fait.

1 réponse

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
Modifié le 12 déc. 2017 à 15:39
Alors c'est normal que tous les indexes pointent sur le dernier
élément enregistré !!!

pourquoi ?
tu crées 1 seul SavImage que tu modifies à chaque passage
mais c'est le même objet !!!

il te faut créer autant de SavImage que de Jpeg à sauvegarder et surtout ne pas les libérer de suite à faire dans le FormDestroy par exemple il en va de même pour les Jpeg que tu crées

tu peux automatiser tout ça en en tenant compte dans le destructeur de TSavImage( Img.Free) et en mettant ThumbItemsList.OwnsObjects à True;


sinon
Stream.Seek(0, soFromBeginning);
est égale à
Stream.Position := 0;
 

et
Stream.Seek(Stream.Position - 1, soFromBeginning);
est égale à
Stream.Seek(-1, soFromCurrent);
 


Cordialement,

     
@+ Cirec
0
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
12 déc. 2017 à 19:10
Ben oui merci ça va bien mieux comme ça.
je corrige aussi le seek.
merci encore
0
Rejoignez-nous