StringList.AddObject [Résolu]

Messages postés
175
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2019
- - Dernière réponse : papyvore
Messages postés
175
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2019
- 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.

Afficher la suite 

Votre réponse

1 réponse

Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
32
0
Merci
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
papyvore
Messages postés
175
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2019
5 -
Ben oui merci ça va bien mieux comme ça.
je corrige aussi le seek.
merci encore
Commenter la réponse de Cirec