![]() |
Varias instancias independientes de un form
En una aplicación tengo varias instancias del mismo form (TExpedientes) y desde cada una de ellas creo una instancia de un form (TExpConsulta) que mantengo oculta (visible:=false) haciendo:
Código:
ExpConsulta:=TExpConsulta.create(self) Código:
Expconsulta.showmodal La pregunta es: ¿Podría ir creando instancias del formulario de consulta con distinto nombre? por ejemplo: Código:
ExpConsulta1:=TExpConsulta.create(self) Código:
ExpConsulta2:=TExpConsulta.create(self) |
La respuesta es sí.
Sólo necesitas declararte una variable del tipo del formulario (TExpConsulta en tu caso) y tirando Edu |
Si, es lo que hago
Código:
ExpConsulta:=TExpConsulta.create(self) |
Buenas!
Con:
es esto lo que haces? Qué raro que lo confunda! Edu |
No, cada instancia de TExpConsultas se crea desde un TExpedientes distinto. Lo que busco es crear cada instancia con distinto nombre para que, en el momento de hacer el showmodal desde su TExpedientes correspondiente, no conmfunda una con otra.
Algo así: "ExpConsulta"+IdExpediente := TExpConsulta.create(Self); si esto fuese posible. |
Vale, lo que te lía es que en el form TExpConsultas tienes declarada una variable global que se llama ExpConsultas (sto pasa en todos los forms que creas)
Lo que tienes que hacer es declarar una variable de tipo TExpConsultas en cada uno de los forms donde lo llamas. Edu |
Perdona pero no entiendo lo que me sugieres.
En TExpedientes tengo una variable global ExpConsulta : TExpconsulta. Utilizando esta variable y en el procedure TExpedientes.FormShow(Sender: TObject); hago ExpConsulta:=TExpConsulta.create(self) |
Vale, el tema es que estás utilizando la variable que tienes declarada en TExpConsulta, que es global para toda la aplicación y por esto se confunden.
Lo que propongo es que tengas la variable de tipo TExpConsultas localmente en el form que la creas (incluso dentro del procedimento donde la llamas, proque este nuevo formulario es modal no?), de esta manera tendrás varias instancias. Edu |
CReo que no expliqué bien. El formulario TExpedientes no es el principal de la aplicación, sino un formulario mas, del que se crean varias instancias. A su vez, desde este se crea siempre una instancia del formulario TExpConsultas en el momento de arrancar TExpedientes. Despues, cada vez que se pulsa el boton de consultas que está en TExpedientes es cuando hago un showmodal del TExpConsultas que he creado al iniciar TExpedientes.
Estas instancias de TExpConsultas son las que creo que se confunden o que solo crea una. |
Solucionado. Ahora entiendo lo que me decias.
He puesto la declaración de la variable ExpConsultas como private y ahora me diferencia las distintas instancias. Gracias por todo. |
Si que te has explicado bien, lo que pasa es que no sé ponertelo clar.
Los n formularios TExpedientes que tienes sí se diferencian verdad? Pues elimina la declaración ExpConsultas : TExpConsultas del formulario TExpConsultas y ponla en TExpedientes. No sería buen profe... Edu |
Creo que el problema aqui es que apicito está perdiendo de vista que la variable ExpConsulta es, en realidad, un puntero. Un puntero a una instancia en particular de un objeto de la clase TExpConsulta, que también podría estar apuntando a nil.
De el curso 1 de punteros, debes recordar que si haces:
En memoria existirán tres instancias de la clase Objeto, pero Puntero1 hará referencia (apuntará) a la última de ellas. Lo que está pasando con tu forma de enfocar el problema es precisamente que solo estas guardando una referencia al último TExpConsulta creado, y aún cuando los demás están en memoria, en tu código no tenes nada que apunte a ellos. Afortunadamente, delphi lleva una lista de todos los forms que existen en cualquier momento creados en la memoria en el arreglo Forms del objeto global screen. Así, podrías fácilmente encontrar un expediente de esta forma:
Y claro está, si pensas mantener varias instancias de una clase de formulario en memoria, será mejor que te acostumbres a borrar la variable global que delphi amablemente crea, pues en este caso no hará mas que provocarte confusión. Hasta luego. ;) |
La franja horaria es GMT +2. Ahora son las 02:28:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi