StringList.AddObject [Résolu]

papyvore 155 Messages postés samedi 15 novembre 2003Date d'inscription 5 avril 2018 Dernière intervention - 12 déc. 2017 à 11:02 - Dernière réponse : papyvore 155 Messages postés samedi 15 novembre 2003Date d'inscription 5 avril 2018 Dernière intervention
- 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 

2 réponses

Répondre au sujet
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 avril 2018 Dernière intervention - Modifié par Cirec le 12/12/2017 à 15:39
0
Utile
1
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 155 Messages postés samedi 15 novembre 2003Date d'inscription 5 avril 2018 Dernière intervention - 12 déc. 2017 à 19:10
Ben oui merci ça va bien mieux comme ça.
je corrige aussi le seek.
merci encore
Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.