StringList.AddObject [Résolu]

Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
- - Dernière réponse : papyvore
Messages postés
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
- 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
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
161
Date d'inscription
samedi 15 novembre 2003
Dernière intervention
10 décembre 2018
-
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.