LoadFromFile = Erreur EAccessViolation

Signaler
Messages postés
163
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
163
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
8 mai 2010
-
Antidote ;)

Voilà j'ai un petit probleme qui commence à devenir très embetant. (surement parce que je suis encore quelque peut novice)

Je m'explique:

en gros dès que j'utilise la fonction LoadFromFile avec en relatation direct un élément d'un packed record
j'ai à l'éxécution du programe et pas à la compilation une erreur fatal de type EAccessViolation.

que ce soit pour un TImage TStrings ou string provenant d'un packed record le résultat est le meme
que ce soit en écriture ou en lecture:

ex :

type
TExemple = packed record
Image: TImage;
texte: TSrings;
chemin: string;
....
end;

implementation

var
Ex : TExemple;

procedure ....
begin
Ex.texte.LoadFromFile(OpenDialog.FileName);
Ex.Image.Picture.LoadFromFile.( ... );
.....LoadFromFile(Ex.chemin);
....
end;

les trois exemple au dessus provoque la meme erreur EAccesViolation lors de leur l'éxécution.
Quelque chose m'échappe.
Cela vient t'il du fait que j'utilise un packed record ?
Aurait-je oublier une class dans les uses alors que la fonction LoadFromFile est bien reconnue ?
je ne voit pas si on pouvait m'éclairer je vous remercie à l'avance. :)

2 réponses

Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Il semblerait que ton problème ne vienne pas de l'utilisation du packed record.
En passant par une TImage temporaire, ça marche.
Essaye donc ceci (pour TString, c'est peut-être du même ordre, pas le temps d'approfondir...)

var Ex: TExemple;
  ImageTemp: TImage;
begin
  if OpenDialog1.Execute then
  begin
    try
      ImageTemp := TImage.Create(self);
      Ex.chemin := OpenDialog1.FileName;      
      ImageTemp.Picture.LoadFromFile(Ex.chemin);
      Ex.Image := ImageTemp;
      Image1.Picture := Ex.Image.Picture; // pour vérifier
    finally
      ImageTemp.Free;
    end;
  end;
end;


Bonne prog' :-p
Messages postés
163
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
8 mai 2010

Antidote ;)

Merci pour ta réponse,
En fait j'ai réussi à contourner le probleme sur le meme principe.
mais en faisait passer mon image par un Timage que je cache à l'écran
Ta solution me semble encore meilleur surtout au niveau de la mémoire !

Merci encore ! :)