Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema con array de componentes (https://www.clubdelphi.com/foros/showthread.php?t=32442)

nenufer 06-06-2006 11:00:59

problema con array de componentes
 
holaa!!
Estoy creando paneles en tiempo de ejecucion y quiero guardarlos en un array para luego crear en ellos un Timage. El problema es que los paneles no se guardan en el array. Las posiciones del array son nil. El array lo declaro global y de forma dinamica.

Código Delphi [-]
Paneles: array of TPanel

El codiog que utilizo es:

Código Delphi [-]
procedure TForm.CreaPaneles();
var
 x,y,i:Integer;
 PnlImagen : TPanel;
begin
 x := PnlImagenes.Width;
 y := PnlImagenes.Height;
 
 setlength(ArPaneles,2);//Array para los panes
 
 for i:=low(Paneles) to high(Paneles) do
  begin
   PnlImagen := TPanel.Create(PnlImagenes);
   PnlImagen.Parent := PnlImagenes;
   PnlImagen.Visible := true;
   if i=0 then
     TamPanel(x,y,PnlImag) //Procedimiento que fija longitudes del panel
   else
     if i=1 then
       TamPanel(x div 2,y div 2,PnlImagen);
end;
end;
 
procedure TForm.CreaImagen(NumImag : Integer);
var
 i : integer;
begin
 
 for i:=0 to NUmImag-1 do
  begin
   Img := TImage.Create(ArPaneles[NImagenes]); //El problema esta aqui
   Img.Parent := ArPaneles[NImagenes];//y aqui
   Img.Visible := true;
   Img.Align := alclient;
   Img.Stretch := true;
 end;
end;


El error que me da es:Acces violation at address 00403456 in module project.exe. Read of address 0000022E.

He puesto puntos de ruptura y veo el que array esta nil.
No se que hago mal. Si alguien me puede ayudar, gracias de antemano

Lepe 06-06-2006 11:13:46

Código Delphi [-]

 for i:=low(ArPaneles) to high(ArPaneles) do // No uses el tipo de datos, sino la variable.
begin
   PnlImagen := TPanel.Create(PnlImagenes);
   PnlImagen.Parent := PnlImagenes;
   PnlImagen.Visible := true;

   Arpaneles[i] := pnlImagen; // guardas la referencia al panel creado. OJO ES UN PUNTERO.

   if i=0 then
     TamPanel(x,y,PnlImag) //Procedimiento que fija longitudes del panel
   else
     if i=1 then
       TamPanel(x div 2,y div 2,PnlImagen);

procedure TForm.CreaImagen(NumImag : Integer);
var
 i : integer;
begin
 
 for i:=0 to NUmImag-1 do
  begin
   Img := TImage.Create(ArPaneles[NImagenes]); //ahora si tiene un valor.
   Img.Parent := ArPaneles[NImagenes];//y aqui
   Img.Visible := true;
   Img.Align := alclient;
   Img.Stretch := true;
 end;
end;
Saludos

nenufer 06-06-2006 11:44:28

Gracias por contestar tan rapido. Ahora ya me funciona bien, aparte de eso me daba el error, porque en creaimagenes:

Código Delphi [-]
for i:=0 to NUmImag-1 do
  begin
   //La posicion de array no existe. tiene que ser:  
   Img := TImage.Create(ArPaneles[NumImagenes-1]); 
    Img.Parent := ArPaneles[NumImagenes-1];//y aqui
...............
 end;

Entonces ya me lo guarda y no me muestra error. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 09:27:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi