Delphi: TImage.Create provoque une violation d'accès
-
10-07-2019 - |
Question
Je m'excuse par avance pour une question sur les débutants, mais pourquoi est-ce que je reçois une "violation d'accès" erreur avec le code ci-dessous (sur la ligne "Créer (SelectorForm);")? J'ai essayé d'utiliser le formulaire principal en tant que propriétaire, mais cela ne faisait aucune différence.
var
SelectorForm: TSelectorForm;
ArrayOfImages: Array [1..10] of TImage;
implementation
procedure TSelectorForm.FormCreate(Sender: TObject);
var
Loop: Byte;
begin
for Loop := 1 to 10 do
begin
with ArrayOfImages[Loop] do
begin
Create(SelectorForm);
end;
end;
end;
La solution
Le problème est que vous le faites effectivement:
var
imageVariable: TImage;
begin
imageVariable.Create (ParentForm);
end;
Ce qui est faux parce que " Créer " La méthode est appelée sur la variable qui n’a pas encore été affectée.
Vous devriez faire ceci:
var
imageVariable: TImage;
begin
imageVariable := TImage.Create (ParentForm);
try
//use the object
finally
FreeAndNil (imageVariable);
end;
end;
Ou plus précisément dans votre code:
for Loop := 1 to 10 do
begin
ArrayOfImages[Loop] := TImage.Create (Self);
end;
N'oubliez pas de libérer les objets
EDIT: Accepter le commentaire de @ andiw et reprendre le bout de la libération d’objets. EDIT2: Accepter le commentaire de @ Gerry et utiliser Self en tant que propriétaire.
Autres conseils
Il y a beaucoup de problèmes avec le code ci-dessus. (n'utilisez pas le "avec" comme ça pour commencer, n'utilisez pas d'octet pour votre boucle var)
Mon hypothèse est que vous voulez finalement un tableau d'instances de TImage créé avec un formulaire en tant que parent.
donc basé sur cette hypothèse ... vous voulez quelque chose comme (non testé)
var
ArrayOfImages: Array [0..9] of TImage;
i : integer;
begin
for i := 0 to 9 do
begin
ArrayOfImages[i] := TImage.Create(theForm);
end;
end;
Notez maintenant que vous aurez la responsabilité de nettoyer le tableau une fois que vous aurez fini de l’utiliser. Vous devrez appeler gratuitement sur chacune des instances de l’image.