FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Dudas Crear Objetos en Tiempo de Ejecución
Hola,
El siguiente código: Crea un Nuevo Formulario con un Botón dentro. 1.- ¿Cómo DESTRUYO (Free=donde coloco?) estos objetos al cerrar la 2da ventana (NuevoForm) creada?. Lo que pasa es que cada vez que clicko el Button1 me crea muchos Forms incluido su botón. Lo que necesito es crear una sola vez, por mucho que le dé n-veces click al Button1. 2.- No recuerdo cual es la propiedad de un Form que por ejemplo AL CREAR el 2do Form: ...... a) ¿Cómo ubico por encima del principal?, es acaso...FormStyle:= fsStayOnTop? y ...... b) ¿Cómo deshabilito el Form principal mientras esté activo el 2do Form hasta que lo cierre? |
#2
|
||||
|
||||
tu variable nuevoForm ponla dentro de tu formulario principal
luego en tu evento has lo siguiente
si aun no funciona pon la variable NuevoForm dentro de una unidad y hazla visible es decir ponla en la parte de interface para que las demas unidades puedan verla saludos
__________________
self.free; |
#3
|
|||
|
|||
Gracias,
droguerman en este momento no tengo Delphi a mano, llegando a casa lo probaré. No se si entendí mal, pero....... ¿donde libero los objetos? Sinaloense, en tu ejemplo hablas sobre liberar el objeto, bien, como dije probaré vuestros ejemplos y mas tarde os comento. Estoy en un Ciber. Solamente argumentar que la primera vez que he creado un form le hice con (self) (NuevoForm := TForm.Create(self) y este evidentemente me ha creado el form, pero dentro del mismo form, por eso opté por (nil); luego al crear el form con el código que les presenté, realmente me resultaba mejor, pero el problema era que la principal (si seleccionaba la ventana) se colocaba encima de la nueva, por ello no se si se olvidaron de mi segunda pregunta por favor Última edición por Deiv fecha: 29-07-2007 a las 23:30:05. |
#4
|
|||
|
|||
Bueno he probado el código de droguerman y funciona, solo quedaría salir de dudas sobre mi segunda pregunta, pero el código Sinaloense no le entendí nada (por Novato)
Cita:
Lo propio aquí esto de: TForm2.existe_forma, Yo entiendo que se coloca cuando está creada la forma, ya que Delphi me devuelve varios errores: [Error] CreaForm.pas(26): Function needs result type [Error] CreaForm.pas(31): Undeclared identifier: 'AClase' [Error] CreaForm.pas(43): Undeclared identifier: 'existe_forma' Lo propio aquí, no sé porque razón me sale un error RAISED, pero cuando cambio a (nil) ya no existe ese error. |
#5
|
|||
|
|||
Bueno sobre mi pregunta 2 la solución estaba con SHOWMODAL, así mismo este me sirve para mi pregunta 1 ya que no le da acceso al Form principal y pulsar n-veces el Boton para crear n-Forms.
En lo que intentaba resolver esta situación gracias a vuestros consejos, me ha ocurrido algo interesante, del cual me quedó una duda con lo siguiente, verán con el código de abajo, no le he dado evento al BitBtn, pero no sé por qué razón cuando clicko al BitBtn, este me cierra el 2do Form creado en tiempo de ejecución, ¿Es que acaso tiene algún Evento DEFAULT el BitBtn que realiza esa operación? Y otra cosa interesante, si cambio en el: procedure TForm1.Button1Click, la línea NuevoForm.showmodal; por NuevoForm.Show; ya no ocurre esa situación de que el BitBtn cierra el 2do Form. ¿Alguien sabe a que se debe ello? Adjunto el Ejemplo |
#6
|
||||
|
||||
Hola,
Cita:
|
#7
|
|||
|
|||
Saludos, aqui hay una solucion:
Primero: En la forma que creas al presionar el botón en el evento onClose pon entas línea: Código:
Action := caFree; Ahora necesitas una función que te diga si la forma que quieres crear ya está creada, pudes usar esta: Código:
function TForm2.existe_forma(AClase: string): Boolean; var i:Integer; begin for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i].ClassName = AClase then Result := True else Result := false; end; Ahora en el botón que crea la forma puedes poner este código, yo estoy creando la forma 'Form3': Código:
if not existe_forma('TForm3') then begin Form3 := TForm3.Create(Self); Form3.Show; end; |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear Objetos en tiempo de ejecucion | mmtaffarel | OOP | 8 | 14-01-2024 17:55:25 |
Crear un DSN en tiempo de ejecucion | neyvan | Conexión con bases de datos | 7 | 21-05-2004 17:41:45 |
Quiero crear objetos en tiempo de ejecución con IntraWeb en Delphi 7 | atirado | OOP | 3 | 11-03-2004 23:06:31 |
TClientDataSet y objetos de campos añadidos en tiempo de ejecución | Berto2003 | Conexión con bases de datos | 2 | 04-03-2004 09:26:27 |
Objetos creados en tiempo de ejecución | Scocc | OOP | 4 | 13-06-2003 20:55:29 |
|