Delphi - Problema con creación de ventanas

 
Vista:

Problema con creación de ventanas

Publicado por jhonny (8 intervenciones) el 21/01/2005 14:40:39
Hola,

Que bueno que tengan este foro, soy novato programando y me ha ayudado mucho las notas y ayudas aquí publicadas. Por favor me pueden colaborar con lo siguiente:

Creo una ventana modal con el siguiente código:

procedure TForm1.MostrarModal(Aclass: TFormClass);
begin
with AClass.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;

Y llamandola así:

MostrarModal(Form2);

Llamo diferentes formularios, la mayoría solo utilizan rejillas de datos y un navegador para consultar tablas y funcionan bien, pero otros utilizan varias dataaware.

Cuando trato de ejecutar alguna acción sobre uno de estos objetos, como una comparación o asignación, ocurre la siguiente excepción:

EAccessViolation with message 'Access Violation at Address 004FF42E in module 'Programa.exe'. Read of address 00000340.

Pero si llamo la forma utilizando:

Application.CreateForm(TForm2, Form2);
Form2.ShowModal;

Esta Trabaja perfectamente y puedo ejecutar todos los procedimientos asignados a ella.

Me gustaría poder implementar la otra forma por ser mucho más elegante, pero no se que problema se presenta.

Estoy utilizando Delphi 6.

El código lo tomé del libro La Cara Oculta de Delphi 4, de Ian Marteens.

Gracias por su colaboración.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con creación de ventanas

Publicado por Kwerty (112 intervenciones) el 21/01/2005 15:15:40
¿Y qué problema te da hacerlo como lo haces? Si el segundo método funciona ¿cómo quieres hacerlo?
Yo suelo hacerlo así:

var
Form2: TForm2;
begin
Form2 := TForm2.Create (Application);
Form2.ShowModal;
...
end;

A mi me funciona así. Pero lo dicho, haz las cosas como te funcionen bien.
Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con creación de ventanas

Publicado por Jhonny (8 intervenciones) el 21/01/2005 17:36:37
Solo quisiera saber qué es lo que está mal, ya que quiero entender bien lo de la POO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con creación de ventanas

Publicado por Delfino (1216 intervenciones) el 22/01/2005 20:59:38
El comportamiento por defecto de un formulario al agregarlo al proyecto es ser creado automaticamente por Delphi y ocultado, el mismo form se destryue automaticamente por Delphi al destruise su owner, q es la aplicacion en general, no es el metodo recomendado para una aplicacion con muchos forms ya q asi quedaran muchos ocupando memoria y ralentizando el programa, el modo recomendado es crear a mano el form y destruirlo si es necesario, pero al destruirlo no se puede ser referenciado, de alli el error de access violation que no pasa con los forms creados por Delphi ya q son existentes pero ocultos, no es un tema dificil de manejar y con solo un poco de logica se pueden hacer bien las cosas, yo suelo hacer un form principal q no se destruye nunca (y q a veces es el MDI), en ese form pongo todas las rutinas y componentes q pueden ser llamados por varios forms, los demas forms se destruyen y construyen a mano liberando asi la memoria..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con creación de ventanas

Publicado por NicoSoft-Taifa (27 intervenciones) el 25/01/2005 15:43:18
No veo la necesidad de complicarse de esa manera, lo más normal es
ejecutar una lineas parecidas a esta, teniendo el form como Disponible y no Autocreate...
With TElform.Create(self) do
try
ShowModal;
íf modalresult=mrok
then.....
else......
finally
Release
( y no Free, que te lo liquida y dara un access violation la proxima vez)
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar