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;
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top