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 28-07-2005
Sayuri Sayuri is offline
Miembro
 
Registrado: jul 2005
Posts: 131
Poder: 19
Sayuri Va por buen camino
Abrir a la vez el mismo form con diferentes datos

Tengo un form con varias etiquetas, combox y demás. Me gustaría que en tiempo de ejecución se pudieran abrir varios forms con distintos datos dentro de algunas de las etiquetas, pero que no se cerraran los anteriores.¿Cómo puedo hacerlo?
Responder Con Cita
  #2  
Antiguo 28-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Declarando variables del tipo del formulario "plantilla", supongo. No sé si convendría declarar algún "Array" del tipo del formulario "plantilla", pero, en todo caso, creando tantas variables del tipo de formulario "plantilla" como tengas pensado utilizar.

De todas formas no sé qué escrúpulos me deja esta respuesta que no me queda del todo contento. Es posible que se me esté escapando algo, o, sencillamente, que halla otras formas de lograrlo más eficientes.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 28-07-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Similar respuesta, pero con otra técnica:

Código Delphi [-]
 var ListaVentanas :TobjectList;

procedure FormPrincipalCreate();
begin
  ListaVentanas := TobjectList.Create(True);
end;

function CrearUnaNueva:integer;
var F:Tform2;
begin
  F := Tform2.Create(nil);
  Result := ListaVentanas.Add(F);
  // devolvemos el indice de la nueva ventana creada dentro de la 
  // lista de ventanas;
end;

Procedure  SetFocusToWindow(const indice:integer);
begin
 if Assigned(ListaVentanas) and (ListaVentanas.Count >indice) then
   TForm2(ListaVentanas.items[indice]).SetFocus;
end;

Procedure FormPrincipalClose(::;
begin
  freeandnil(ListaVentanas);
  // liberamos la lista y todas las ventanas que haya abierto de Form2
end;

ListaVentanas es un Array pero de objetos, así no creamos variables para cada una de las ventanas, por contra, tendremos que acceder a través de su "indice".

Dependiendo de la implementación, quizás se pueda acceder a través de ListaVentanas.IndexOf

Busca por TobjectList, se ha explicado muchas veces su uso

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 28-07-2005 a las 18:29:02.
Responder Con Cita
  #4  
Antiguo 28-07-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Código Delphi [-]
With TForma.Create(Self{o nil}) Do Try
   //Aqui asignas lo que tengas que asignar
  Show; 
  //ShowModal;
Finally
  Free;
End;

Con la misma llamada puedes crear 50.000 formas.

Si quieres verstilidad haslo en un procedimiento teniendo por parametro los valores que quieres asignar a los controles.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #5  
Antiguo 29-07-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Creo que hasta ahora se han dado respuestas complejas a un asunto que tiene una solución mas fácil (en principio):

Es perfectamente posible tener mas de una instancia de una clase formulario, donde cada una maneje sus propios datos independientemente.

Ejemplo:

Tenemos una forma (TForm1) con un Label1, ComboBox1 y Edit1.

Para no complicar mas el asunto aquí, accederé directamente a los valores de estos controles, aunque lo ideal es publicar propiedades y encapsular estos detalles.

Ahora:

Código Delphi [-]
Procedure TForm2.CrearFormas1;

Var
  Forma1, Forma2 : TForm1;

Begin
  Forma1 := TForm1.Create(Application);
  Forma1.Label1.Caption := 'soy el primer formulario!';
  Forma1.CheckBox1.ItemIndex := 3;
  Forma1.Edit1.Text := 'editame!';
  Forma1.Show;

  Forma2 := TForm1.Create(Application);
  Forma2.Label1.Caption := 'soy el segundo formulario!';
  Forma2.CheckBox1.ItemIndex := 0;
  Forma2.Edit1.Text := 'no se te ocurra editame!';
  Forma2.Show;
end;

Probá el código y me contas.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 08-08-2005
Sayuri Sayuri is offline
Miembro
 
Registrado: jul 2005
Posts: 131
Poder: 19
Sayuri Va por buen camino
Muchas gracias amigos, me ha funcionado correctamente, ahora mi único problema es que no sé que instruccion he de usar para cerrar cada uno de ellos. muchas gracias
Responder Con Cita
  #7  
Antiguo 08-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Depende de la opción que estes usando:

- Si usas la opción de jachguate, usa el evento OnClose y añade
Código Delphi [-]
Action := cafree;

Solo queda el problema de que la variable Forma1 y/o Forma2 no apunta a nil, a ver si jachguate nos dice como identificarlo.

Con la solución que propuse yo:
Código Delphi [-]
Procedure  CloseWindow(const indice:integer);
begin
 if Assigned(ListaVentanas) and (ListaVentanas.Count >indice) then
 begin
    TForm2(ListaVentanas.items[indice]).Free;
    ListaVentanas.Delete(i);
    ListaVentanas.Pack;
end;
end;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 12-08-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Buen día

Cita:
Empezado por Lepe
Solo queda el problema de que la variable Forma1 y/o Forma2 no apunta a nil, a ver si jachguate nos dice como identificarlo.
Si os fijais en cómo está implementado, las variables Form1 y Form2 que usé son locales al procedimiento CrearFormas1, y jamás se chequea si estas son nil, puesto que no hace falta, ya que en cada llamada se asume que se crearán dos nuevos formularios...

Al final, lo que yo he puesto antes como ejemplo, es solo eso, un ejemplo, que da la idea y demuestra la capacidad de independencia entre dos instancias.

Por último, aclaro que en muchos casos no hace falta mantener una lista independiente de las ventanas creadas, en algunos si... siempre depende de la situación.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 12:03:55.


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