PDA

Ver la Versión Completa : ¿Cómo saber si un formulario está creado?


newtron
31-03-2012, 10:08:16
Hola a tod@s.

Para hacer consultas de tablas tengo un formulario especial de la clase TForm llamado TNTConsulta. Cuando quiero hacer una llamada al mismo lo declaro como una variable local, lo creo y llamo a una función del mismo, de la siguiente manera:


procedure TNTFormTraspasos.SpeedButton1Click(Sender: TObject);
var
DialogoConsulta: TNTConsulta;
begin
DialogoConsulta:=TNTConsulta.Create(nil);
DialogoConsulta.ConsultaConFiltro2('Consulta de articulos',Tabla,1,3,'CODIGO',Filtro);
if DialogoConsulta.ModalResult = mrOK then
EditArticulo.Text:=DialogoConsulta.Valor;
DialogoConsulta.Free;
end;


.... bien, por otros temas necesito saber si la variable DialogoConsulta ha pasado ya por el .Create. He probado a ver si es igual a nil pero no lo es y con el depurador no se puede saber el valor que tiene hasta que no se ha creado, o sea, que no sé qué valor tiene antes de pasar por el .create.

No se si me he explicado con claridad.

Gracias y un saludo

Al González
31-03-2012, 13:12:39
Si tu variable fuera global en lugar de local —quizá tengas una variable llamada "NTConsulta"—, podrías usar "FreeAndNil (NTConsulta)" En lugar de "NTConsulta.Free". Hace lo mismo (destruir el objeto), pero asignándole Nil a la variable. Así es más fácil determinar luego si el objeto existe o no, esto siempre que no se dé el caso de tener dos formularios de consulta creados, pues la variable solamente puede apuntar a uno de ellos.

Regreso a la cama...

Lepe
31-03-2012, 14:58:09
El caso es que Delphi no inicializa las variables locales, de ahí que no puedas saber qué valor tiene, es más, fuera de esa rutina ni siquiera sabes si ha sido creado o no.

Quizás puedas consultar el objeto Screen donde aparece todas las ventanas que tú has creado:

var i:integer;
begin
for i:= 0 to Screen.count - 1 do
begin
if screen.forms[i].classname = 'TNTConsulta' then showmessage(' eureeeeeka');
end;
end;

Otra cosa es que antes de crear la ventana, puedes asignar el valor nil a la variable temporar, así si puedes saber si ha sido creado. Incluso puedes usar FreeAndNil dentro de la rutina, como dice Al González, para testear su valor y tal.

newtron
01-04-2012, 09:22:22
Ok, lo pruebo.

Gracias a ambos y un saludo.

newtron
01-04-2012, 09:55:17
Vale.

Esto me valdría, el problema es que el formulario no tiene FreeAndNil, solo Free :confused:. Imagino que si solo lo igualo a nil irá creando un formulario nuevo en cada .create, ¿no?, ¿qué solución se os ocurre?.

Casimiro Notevi
01-04-2012, 12:14:28
Se usa:
FreeAndNil( LoQueSea );

newtron
02-04-2012, 09:04:39
Se usa:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)FreeAndNil( LoQueSea );



¡Andalaleche! y yo pensando que era un método del formulario. :D

Me vale, gracias a todos.

Casimiro Notevi
02-04-2012, 10:39:39
¡Andalaleche! y yo pensando que era un método del formulario.
Es que no se puede saber todo :)