Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-07-2010
gio013 gio013 is offline
Miembro
 
Registrado: Apr 2010
Posts: 22
Poder: 0
gio013 Va por buen camino
como crear ventana emergente

olas..

como creo una ventana emergente?...
es para ponerla mediante un botón.


grax
Responder Con Cita
  #2  
Antiguo 27-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
 
Registrado: Jan 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
osea,
que deceas que al imprimir un boton aparezca la ventana?
yas has intentado algo?

bueno, podrias mostrar un formulario cada vez que oprimas el boton:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
     try
        Application.CreateForm(TForm_ventanaEmergente, Form_ventanaEmergente);
        Form_ventanaEmergente.ShowModal;
     except
        Form_ventanaEmergente.Free;
     end;
end;

claro que el form_ventanaEmergente lo tendrias que tener ya creado. y este boton llamar desde un form principal
__________________
Para una vida sana hay que ocupar 30 de 24hrs diarias...Ups!
Responder Con Cita
  #3  
Antiguo 28-07-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.721
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Jac fcc: creo que has tenido un despiste, en lugar de "EXCEPT" quizá debiste poner "FINALLY". De lo contrario únicamente eliminaría la ventana si se lanza una excepción, pero si todo funcionara correctamente entonces nunca la eliminaría, ocupando cada vez más memoria y generando algún que otro problema más, dependiendo de lo que haga la propia ventana.

Por otro lado, en vez de usar "Application.CreateForm" mejor, quizá, crearla diréctamente. Vamos, que yo lo haría así:
Código Delphi [-]
PROCEDURE TForm1.Button1Click (Sender: TObject);
BEGIN
     TRY
        Form_ventanaEmergente := TForm_ventanaEmergente.Create (SELF);
        Form_ventanaEmergente.ShowModal;
     FINALLY
        Form_ventanaEmergente.Free;
     END;
END;
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 28-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.083
Poder: 29
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gio013.

Es correcta la acotación de Nuño.

Y se puede reducir más el código trabajando directamente con la clase:
Código:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  with TForm_ventanaEmergente.Create(Self) do
  try
    ShowModal;
  finally
    Free;
  end;
end;
Además no te olvides de quitar esa ventana de la creación automática de ventanas.

Project-> Options-> AutoCreate Forms.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-07-2010 a las 11:12:44.
Responder Con Cita
  #5  
Antiguo 28-07-2010
gio013 gio013 is offline
Miembro
 
Registrado: Apr 2010
Posts: 22
Poder: 0
gio013 Va por buen camino
olas
primero gracias a todos por responder prontamente.
ecfisa el comentario tuyo me enseño algo que no sabia (en el manejo de la clase ),ciertamente ahorra codigo. muchas gracias;

ahora
olas jacc fcc no entiendo esta linea de codigo

Código Delphi [-]
        Application.CreateForm(TForm_ventanaEmergente, Form_ventanaEmergente);

lo que anda entre paréntesis a que se refiere eso.
grax por leer..
Responder Con Cita
  #6  
Antiguo 28-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
 
Registrado: Jan 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
Cita:
lo que anda entre paréntesis a que se refiere eso.
a pues, asi se indica a la aplicación que se quiere crear en tiempo de ejecución dicho formulario, los parámetros corresponden al nombre del formulario y la clase respectivamente.

es similar al codigo que escribió el amigo ecfisa:
Cita:
TForm_VentanaEmergente.create(self)
en cuanto al except, no es despiste, aclaro y ustedes me indican si hago mal, cada que creo un formulario;

en el evento onclose() coloco
Action:=caFree //para liberar los componentes.

y en el evento ondestroy() coloco
Form_VentanaEmergente:=nil //para liberar formulario

por eso no necesito liberar memoria en el finally, a menos que ocurra alguna excepcion en el programa entonces, si libero memoria en el except.
__________________
Para una vida sana hay que ocupar 30 de 24hrs diarias...Ups!
Responder Con Cita
  #7  
Antiguo 29-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.083
Poder: 29
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jac.

El problema del uso que haces de try except; es que puede enmascarar errores y eso conlleva a dolores de cabeza.
Voy a usar un ejemplo infantil, pero va a servir para el caso.

Suponé que tenemos Form2 creado desde Form1 así:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
   Application.CreateForm(TForm2,Form2);
   Form2.ShowModal;
  except
   Form2.Free;
  end;
end;
Y en el evento OnCreate del Form2:
Código:
procedure TForm2.FormCreate(Sender: TObject);
begin
  LineaQueCausaUnaExcepción; 
end;
La excepción es detectada por except en Form1, la memoria ocupada por Form2 es liberada, el form no se muestra,
seguimos en Form1, pero... ¿ que pasó? ¿ por que no se muestra Form2 ?

Hemos metido la pata hasta el cuadríl y nadie nos dice por qué.

Sucede que capturamos la excepcion antes del ciclo de mensajes.
Ya existe un try/except en el ciclo de mensajes, y se muestra con Application.ShowException, abortando el mensaje.

Esto no pasa con el uso de finally; elevándonos la excepcion y avisándonos lo que pasa.

Este ejemplo es muy trivial, pero lo cierto es que detectar un error en una aplicación grande, suele ser complicado,
aún con los mensajes de excepción.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 29-07-2010 a las 07:42:15.
Responder Con Cita
  #8  
Antiguo 29-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
 
Registrado: Jan 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
gracias ecfisa,
siempre tienes atinadas tus observaciones.

lo tomaré en cuenta
__________________
Para una vida sana hay que ocupar 30 de 24hrs diarias...Ups!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
como crear una ventana de login wadhis Conexión con bases de datos 1 27-08-2008 09:47:26
cómo crear ventana de inicio como la de word o delphi? jpcancino Varios 2 14-03-2007 02:56:02
En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija Durbed Varios 8 05-07-2005 11:51:54
Ventana Emergente G.A.R.S Gráficos 2 27-05-2005 04:41:23
capturar datos de una ventana emergente smendo PHP 2 01-12-2004 10:50:29


La franja horaria es GMT +2. Ahora son las 10:01:21.


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