Problema al cerrar programa con matriz de objetos.
Hola:
He creado un programa que hace una matriz de objetos del tipo TLabel. Creo los objetos y los distribuyo en el formulario. Pero cuando ejecuto mi formulario, al querer intentarlo (es decir, cerrar mi programa) me sale siempre un error que dice: 'Invalid Pointer operation'. ¿A qué se refiere? ¿Cómo soluciono el problema? Gracias. |
¿Puedes poner un fragmento de cómo los creas y cómo los destruyes?
// Saludos |
Ok.
Tfm_Principal = class(TForm) procedure FormCreate(Sender: TObject); private //declaro la matriz. mt_NumeroA: array of TLabel; public { Public declarations } end; var fm_Principal: Tfm_Principal; implementation {$R *.dfm} procedure Tfm_Principal.FormCreate(Sender: TObject); var conteo: byte; begin //creo los objetos. setlength(mt_NumeroA,7); for conteo:=0 to 7 do begin mt_NumeroA[conteo]:= TLabel.Create(nil); mt_NumeroA[conteo].Parent:=fm_Principal; mt_NumeroA[conteo].Caption:=inttostr(conteo); mt_NumeroA[conteo].Left:=5; mt_NumeroA[conteo].Top:=15+15*conteo; end; end; end. No sé cómo debo destruirlos. He destruido otros objetos, pero nunca intenté con matrices. |
A bote pronto veo un error: creas un arreglo de 7 elementos pero asignas 8 (0..7).
Ahora, todos esos objetos tienes que destruirlos o poco a poco perderás memoria. Puedes, al término del programa (evento OnDestroy del formulario) recorrer con un ciclo el arreglo aplicando el método Free de cada objeto. O bien puedes construir los objetos con
De esta manera estás indicando que Self (el formulario en este caso) es el "dueño" del objeto creado. Los dueños se encargan en automático de destruir a sus componentes. // Saludos |
¡Funcionó! ¡Ya no sale el error! Gracias por tu ayuda, estaba creando 8 objetos, pero mi variable tenía una longitud de 7.
Gracias una vez más. Saludos. |
La franja horaria es GMT +2. Ahora son las 20:26:40. |
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