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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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