Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2010
titomigue titomigue is offline
Miembro
 
Registrado: may 2010
Posts: 17
Poder: 0
titomigue Va por buen camino
clonar forms

Hola, mi problema es que tengo un form principal, y otro preparado que es el que clono.

Desde el principal llamo a esta funcion:

procedure FormClone(form : TForm) ;
var
ms : TMemoryStream;
clone : TForm;
begin
ms := TMemoryStream.Create;
try
ms.WriteComponent(form) ;
ms.Position := 0;
clone := TFormClass(form.ClassType).CreateNew(Application) ;
ms.ReadComponent(clone) ;
clone.caption:=Datos.TablaListado.Fields.FieldByName('Nombre').AsString;
clone.Left := form.Left;
clone.Top := form.Top;

clone.Visible:=false;
Form3.Edit1.Text:=IntToStr(indice+1);//esto es una variable que luego uso
clone.Show;
finally
ms.Free;
end;
end;

Asta aqui todo bien, me clona la ventana, unas veces 3, otras 4 veces... lo que necesite el programa, y la ventana clonada comienza a trabajar.

Como puede verse en la funcion, la ventana está oculta. El problema es que hay algunas ocasiones en el que tengo que introducir algun dato de forma manual, y detecto cuando es, pero no consigo poner la ventana visible.

Es decir tengo 4 ventanas generadas a partir de esa funcion trabajando y quiero en un momento dado, que la ventana 2 (por ejemplo) se ponga visible, no se como puedo referirme a esa ventana en concreto para ponerla visible, he probado a poner form3.visible:=true; (form3 es la ventana que clono) y lo que hace es abrirme una nueva...

Alguna idea? gracias.
Responder Con Cita
  #2  
Antiguo 03-06-2010
duranguenze duranguenze is offline
Miembro
 
Registrado: nov 2009
Posts: 17
Poder: 0
duranguenze Va por buen camino
Asi como esta el codigo creas formularios a lo alli se va, y dejas que anden volando por alli, ya que creas una variable tipo TForm en un sub procedimiento, al crearlo y terminar, esa variable se queda en el limbo esperando a que terminen con su vida, cuando mandas a llamar otra funcion lo que pasa es que como el espacio asignado a la variable anterior clone, ya esta ocupado, delphi asigna otro nuevo espacio, y se puede crear otro formulario:
Cita:
clone := TFormClass(form.ClassType).CreateNew(Application) ;
de cierta manera esta bien, pero te falta ver como encontrar todos los formularios, una idea es crear un arreglo de referencias a objetos del tipo "TObject" y meter la referencia en el para luego saber cual abrir y asi controlarlo con "TForm(arreglo[2]).visible:=true" o el caso que sea.
Responder Con Cita
  #3  
Antiguo 03-06-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por titomigue Ver Mensaje
Es decir tengo 4 ventanas generadas a partir de esa funcion trabajando y quiero en un momento dado, que la ventana 2 (por ejemplo) se ponga visible, no se como puedo referirme a esa ventana en concreto para ponerla visible, he probado a poner form3.visible:=true; (form3 es la ventana que clono) y lo que hace es abrirme una nueva...
Lo lógico sería que guardaras referencia de los formularios que vas creando para luego poder acceder a ellos sin problemas.

Por ejemplo con un TStringList (nombre + referencia) o con un TList.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 03-06-2010
titomigue titomigue is offline
Miembro
 
Registrado: may 2010
Posts: 17
Poder: 0
titomigue Va por buen camino
duranguenze: y ¿como se hace un arreglo de referencias a objetos del tipo "TObject"?

Neftali: ¿me podrias poner un pequeño ejemplo?
Responder Con Cita
  #5  
Antiguo 03-06-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La idea es convertir ese procedimiento y devolver el formulario creado.
Luego por otro lado creas una Lista de Objetos (TStringList) y vas añadiendo los formularios creados y el nombre.

Ahí te envío un ejemplo de cómo añadirlo a la lista y luego accederlos:

Archivos Adjuntos
Tipo de Archivo: zip Clonar formularios.zip (5,6 KB, 8 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 03-06-2010
titomigue titomigue is offline
Miembro
 
Registrado: may 2010
Posts: 17
Poder: 0
titomigue Va por buen camino
me he descargado el ejemplo y le e estado mirando, aun no le he llevado a mi aplicacion pero creo que me va a ser de gran ayuda, muchas gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Clonar Form (fsMDIChild) ManuelPerez Varios 8 20-09-2007 10:29:57
Clonar TADOQuery david.rguez Conexión con bases de datos 2 19-09-2007 16:26:44
Clonar Objeto senda OOP 1 13-08-2007 18:24:35
Duplicar / Clonar tabla con ADO Marcb3 Conexión con bases de datos 2 30-01-2007 13:15:37
Como Clonar un ibDataset???? AGAG4 Firebird e Interbase 4 28-10-2004 17:21:36


La franja horaria es GMT +2. Ahora son las 03:50:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi