movorack
02-03-2010, 04:39:51
Hola club... aqui liandome la cabeza yo solo...
en mis progamas siempre para crear/mostrar los formularios uso las siguientes lineas:
if not Assigned(Form) then
Application.CreateForm(TForm, Form);
Form.Show;
y luego al cerrar los formularios en el evento OnClose le coloco estas otras lineas
Action := caFree;
Form := nil;
Como el código lo tengo que repetir una y otra vez, me puse a darme solo contra el código e hice este procedimiento, basandome en lo que he leido aqui en el club y en otras partes:
procedure CreateForm(ClassName: TPersistentClass; FormName: String);
var
Component : TComponent;
begin
Component := Application.FindComponent(FormName);
if not Assigned(Component) then begin
try
FindClass('T'+FormName);
except
classes.RegisterClass(ClassName);
end;
Application.CreateForm(TComponentClass(ClassName), TForm(FormName));
end else
TForm(Component).Show;
end;
Funciona!... pero cuando voy a cerrar el formulario... en algunas ocasiones, me lanza un error "Invalid pointer"... y no se donde está el error exactamente pq es lo único que dice... además que no se deja capturar para revisión... solo sale el error y ya...
de ahi en adelante, el programa sigue trabajando bien hasta que lo cierro y vuelve a sacar el error una y otra vez.
el error "Invalid pointer" no sale siempre, como puede salir en relación 1:10, tambien puede ser 1:1 o 1:20...
se que es un error en el procedimiento que cree, pq al usarlo de la otra manera... ya no salen errores.
bueno ya dejo de tirar lora... y si alguien me puede hacer un comentario o aporte... se lo agardeceré.
en mis progamas siempre para crear/mostrar los formularios uso las siguientes lineas:
if not Assigned(Form) then
Application.CreateForm(TForm, Form);
Form.Show;
y luego al cerrar los formularios en el evento OnClose le coloco estas otras lineas
Action := caFree;
Form := nil;
Como el código lo tengo que repetir una y otra vez, me puse a darme solo contra el código e hice este procedimiento, basandome en lo que he leido aqui en el club y en otras partes:
procedure CreateForm(ClassName: TPersistentClass; FormName: String);
var
Component : TComponent;
begin
Component := Application.FindComponent(FormName);
if not Assigned(Component) then begin
try
FindClass('T'+FormName);
except
classes.RegisterClass(ClassName);
end;
Application.CreateForm(TComponentClass(ClassName), TForm(FormName));
end else
TForm(Component).Show;
end;
Funciona!... pero cuando voy a cerrar el formulario... en algunas ocasiones, me lanza un error "Invalid pointer"... y no se donde está el error exactamente pq es lo único que dice... además que no se deja capturar para revisión... solo sale el error y ya...
de ahi en adelante, el programa sigue trabajando bien hasta que lo cierro y vuelve a sacar el error una y otra vez.
el error "Invalid pointer" no sale siempre, como puede salir en relación 1:10, tambien puede ser 1:1 o 1:20...
se que es un error en el procedimiento que cree, pq al usarlo de la otra manera... ya no salen errores.
bueno ya dejo de tirar lora... y si alguien me puede hacer un comentario o aporte... se lo agardeceré.