Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2007
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Encontrar un formulario en la aplicacion dado un string

Hola, necesito alguna forma que, dado un string con el nombre de un formulario, lo encuentre en mi aplicación. El problema es que el formulario puede estar o no creado ya. Un saludo, mil gracias.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #2  
Antiguo 26-11-2007
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,

Tal vez no sea preciso que uses una cadena, sino que, si utilizas una variable para el formulario en cuestión, por ejemplo, "form2", puedes codificar algo como:

Código Delphi [-]
If not Assigned(form2) then
  form2 := TForm2.Create(Self);
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 27-11-2007
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.275
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
También puedes usar un TObjectList, cuandos creas un formulario lo añades, cuando lo destruyes lo borras.
Para buscarlo, sólo debes recorrer el ObjectList y ver de los que hay creados cual se llama igual que el tuyo.
__________________
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 27-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Otra forma más:
Código Delphi [-]

// si lo encuentra, devuelve en Result el Form
// si no lo encuentra, devuelve Nil
function FormExists(NombreClase:String):TForm;
var i:integer;
begin
  Result:= nil;
  for i:= 0 to Screen.FormCount - 1 do
    if Screen.Forms[i].ClassName = NombreClase then
    begin
       Result := TForm(Screen.Forms[i]);
       Break;
    end;
end;

// uso:
var F:TForm;
begin
  F:=  FormExits('TForm1');
  if Assigned(F) then
    F.BringToFront
  else
  begin 
// necesitaría tener la clase de esta ventana para hacer:
  F := TClaseVentana.Create(Application);
  F.Show;

  end;
El nombre del Formulario no es seguro, si creas tres ventanas de tipo TForm1, se llamarán Form1, Form1_1, Form1_2 y al tiempo de buscar se complican las cosas, es mejor usar su tipo o usar fábrica de clases (busca en el foro) pero ya se empieza a complicar las cosas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 27-11-2007
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Gracias a todos, buscando y buscando he encontrado una forma que es registrando las clases en el formulario principal y cuando quiero crear el formulario llamo a la función GetClass( string );
Un saludo!
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #6  
Antiguo 27-11-2007
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.275
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 Cecil Ver Mensaje
buscando he encontrado una forma que es registrando las clases en el formulario principal y cuando quiero crear el formulario llamo a la función GetClass( string )
Si has registrado correctamente la clase, GetClass() te dará una referencia a esa clase con lo que puedes crear un formulario.
Lo que no me queda claro es qué tiene que ver eso con encontrar un formulario que puede estar creado o no a partir de un string.
¿Puedes explicarte?
__________________
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
  #7  
Antiguo 28-11-2007
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Pues mira, lo que necesitaba era crear un formulario a partir de el nombre de su clase, y lo he hecho de la siguiente manera:

Código Delphi [-]
function CrearForm(sForm: String): TForm;
var
  PcClase: TPersistentClass;
begin
{
  Para que funcione esta función, debemos de Registrar la Clase del Formulario en el Formulario principal
  como en el ejemplo siguiente:

  initialization
    RegisterClass( TFormEditAgentes );

  finalization
    UnregisterClass( TFormEditAgentes );
}

  Result := nil;
  
  PcClase := GetClass( sForm );

  if Assigned( PcClase ) then
    Result := TFormClass( PcClase ).Create( Application );
end;

Si te fijas, al GetClass le paso como parámetro un string, que es el nombre de la clase del formulario y ya básicamente queda crearlo. Espero resolver tus dudas
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #8  
Antiguo 28-11-2007
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.275
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 Cecil Ver Mensaje
necesito alguna forma que, dado un string con el nombre de un formulario, lo encuentre en mi aplicación.
Cita:
Empezado por Cecil Ver Mensaje
...lo que necesitaba era crear un formulario a partir de el nombre de su clase
Más o menos ya me imaginaba que iba por ahí, lo que me liaba era la frase inicial del mensaje. Si de primeras hubieras dicho que lo que necesitabas era crear uno nuevo, seguramente hubiéramos llegado antes a la conclusión.

En principio crear uno es más sencillo, que buscar uno ya creado con esa clase.

Un saludo y gracias por postear el código.
__________________
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
  #9  
Antiguo 29-11-2007
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Imagino que tuve que liaros mucho con mi código, pido disculpas. Intentaré explicarme mejor en siguientes ocasiones. De nuevo gracias a todos por vuestra ayuda y un gran saludo.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
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
Formulario y Objetos por String nostrajara Varios 5 14-11-2007 11:36:25
encontrar caracter en string emeceuy Varios 4 13-09-2007 01:35:35
Caracteres de String pertenecienes a subconjunto dado taniapsj JAVA 0 06-07-2007 12:50:19
Encontrar caracter en un string davidgaldo Varios 1 21-10-2005 09:44:17
Crear Formulario pasando como parametro un string morfeo21 Varios 1 18-08-2004 02:39:58


La franja horaria es GMT +2. Ahora son las 08:05:05.


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