LoadFromFile = Erreur EAccessViolation

cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010 - 20 oct. 2003 à 02:28
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010 - 21 oct. 2003 à 05:58
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

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
21 oct. 2003 à 00:40
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
0
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
21 oct. 2003 à 05:58
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 ! :)
0
Rejoignez-nous