Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Manejo de ventanas

He creado una aplicación en lazarus, la cual esta conformada por varios formularios que deben abrirse desde un formulario principal.

Estos formularios no se cargan junto con el programa cuando este se inicia.

Mi duda es:
¿Cual es la forma correcta para abrir los formularios según haga click en el botón programado en el formulario principal para efectuar tal accion?,¿Como quedaría el procedimiento?

Aclaro que puedo necesitar tener mas de un formulario abierto simultáneamente, por lo que no se si abrirlos de forma modal sea la elección correcta

Bueno, agradeciendo de antemano su valiosa colaboración, quedo al pendiente

Saludos
Responder Con Cita
  #2  
Antiguo 04-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Creando el form cuando se necesite y mostrandolo con modal, este quedara activo, no se podran abrir otros forms.
Creando el from cuando se necesite pero mostrarlo sencillamente, se podra acceder a otros forms, eso si, el form NO sera destruido, salvo que se especifique en el correspondiente evento de ese mismo form.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 04-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Creando el form cuando se necesite y mostrandolo con modal, este quedara activo, no se podran abrir otros forms.
Creando el from cuando se necesite pero mostrarlo sencillamente, se podra acceder a otros forms, eso si, el form NO sera destruido, salvo que se especifique en el correspondiente evento de ese mismo form.
Saludos

Entiendo que cuando dices "salvo que se especifique en el correspondiente evento de ese mismo form", te refieres al momento ya de cerrar el formulario, ¿Es asi?

Por otro lado, a lo mejor estoy pidiendo mucho, pero...será que tu podrias indicarme con un pequeño ejemplo cual seria el codigo para efectuar lo que me indicas?...

Bueno, agradeciendo mucho tu respuesta, nuevamente quedo al pendiente

Gracias y saludos...
Responder Con Cita
  #4  
Antiguo 04-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El programa es sencillo.
Como sabes hay dos formas, showMODAL o simplemente SHOW.
Con Modal el form queda activo, NO deja que otro form sea visto hasta que se cierre, este se crea y se destruye Desde el form que lo llamo, una vez que se deja de usar
Con Show, se pueden abrir otros formularios a la vez, se crean, pero se destruyen desde el mismo form (puede ser casi cualquier evento, yo uso onclose en este caso).
El problema con este (show) es que se necesita verificar que YA se creo, de otra manera te seguira creando forms (iguales).
El asunto es crear los forms y destruirlos cuando no se necesiten.
Primero se crean normalmente los forms.
En project, option, Forms, se quitan de la lista los forms que no se quieran crear al principio, esto se revisa facilmente en la unit del proyecto (revisala).
Te pongo un ejemplo con 4 forms, el 1 es el principal, el 2 es showmodal y el 3 y 4 son show.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 05-05-2011 a las 00:05:58.
Responder Con Cita
  #5  
Antiguo 04-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Muy agradecido con toda tu colaboración

El Asunto esta solventado conforme a tus indicaciones, muchas gracias..

Saludos y hasta pronto
Responder Con Cita
  #6  
Antiguo 05-05-2011
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
Código Delphi [-]
begin
  if not Assigned(Form2) then
   begin
     Form2 :=TForm2.Create(Self);
     Form2.Show;
   end
 else
   begin
     if Form2.WindowState=wsminimized then
       Form2.Show;
       Form2.WindowState:=wsNormal;
   end;
end;

La idea es crear es form y si ya esta creado que lo muestre.
esta es una idea que te podria servir, donde ademas si el form esta minimizado lo muestra en ventana normal.
Responder Con Cita
  #7  
Antiguo 07-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Cita:
Empezado por luk2009 Ver Mensaje
Código Delphi [-]
begin
  if not Assigned(Form2) then
   begin
     Form2 :=TForm2.Create(Self);
     Form2.Show;
   end
 else
   begin
     if Form2.WindowState=wsminimized then
       Form2.Show;
       Form2.WindowState:=wsNormal;
   end;
end;

La idea es crear es form y si ya esta creado que lo muestre.
esta es una idea que te podria servir, donde ademas si el form esta minimizado lo muestra en ventana normal.

Si, muy buena idea la que planteas, seguro y la adoptaré.

Solo una interrogante....¿como cierras este tipo de ventanas no modales?, tengo entendido que en el evento OnClose del formulario creado agregas :

CloseAction:=caFree;

pero esto me envia un mensaje de error...

¿Cual es la codificación correcta que debo emplear?

De antemano gracias..
Responder Con Cita
  #8  
Antiguo 07-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola Kelvin.

Que raro... lo que haces parece correcto, sería mas o menos así ¿ no ?:
Código Delphi [-]
procedure TForm2.FormClose(Sender: TObject; var CloseAction: CloseAction);
begin
  CloseAction := caFree;
end;

¿ Que mensaje de error te arroja ?

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 09-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Las disculpas del caso, no es un mensaje de error el que se genera, sino que sucede lo siguiente:


Creo y muestro el formulario (llamado frmclientes) de la siguiente forma desde otro formulario:
Código Delphi [-]
  if not Assigned(frmclientes) then 
  begin
    frmclientes :=Tfrmclientes.Create(Self);
    frmclientes.Show;
  end 
  else 
  begin
    if frmclientes.WindowState=wsminimized then 
    begin
      frmclientes.Show;
      frmclientes.WindowState:=wsNormal;
   end;
  end;

y tengo en el evento OnClose de frmclientes lo siguiente:


Código Delphi [-]
procedure Tfrmclientes.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction:=caFree;        
end;


Lo que sucede es que, al iniciar la aplicación y abrir el formulario frmclientes por primera vez este se crea y se muestra sin problemas, luego lo cierro y todo bien, pero cuando quiero volver a mostrarlo siempre desde el mismo formulario desde donde lo llame al iniciar la aplicación, ya no se vuelve a mostrar hasta iniciar de nuevo la aplicacion y caer en el mismo circulo...

¿Que podra ser..?...me suena a que no se esta destruyendo el formulario o algo se esta quedando en memoria...no se..

Gracias y a la espera de sus comentarios...

Última edición por ecfisa fecha: 10-05-2011 a las 02:46:13. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #10  
Antiguo 09-05-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Cita:
Empezado por Kelvin Ver Mensaje

y tengo en el evento OnClose de frmclientes lo siguiente:



procedure Tfrmclientes.FormClose(Sender: TObject; var CloseAction: TCloseAction
);
begin


CloseAction:=caFree;


end;



Lo que sucede es que, al iniciar la aplicación y abrir el formulario frmclientes por primera vez este se crea y se muestra sin problemas, luego lo cierro y todo bien, pero cuando quiero volver a mostrarlo siempre desde el mismo formulario desde donde lo llame al iniciar la aplicación, ya no se vuelve a mostrar hasta iniciar de nuevo la aplicacion y caer en el mismo circulo...

¿Que podra ser..?...me suena a que no se esta destruyendo el formulario o algo se esta quedando en memoria...no se..

Gracias y a la espera de sus comentarios...

saludos.

cambia.
Código Delphi [-]
 
CloseAction:=caFree;

por
Código Delphi [-]
 
FreeAndNil(frmclientes);
Responder Con Cita
  #11  
Antiguo 09-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Cita:
Empezado por beginner01 Ver Mensaje
saludos.

cambia.
Código Delphi [-]
 
CloseAction:=caFree;

por
Código Delphi [-]
 
FreeAndNil(frmclientes);

Vaya!...esto esta saliendo mas complejo de lo que me esperaba, ¿Sera que estoy condenado a dejar que el proyecto funcione bajo el comportamiento normal de lazarus de crear todas las ventanas al inicio de la aplicación y luego solo ir ocultando o mostrando las que se necesiten???..ojala que no sea así... confío en que hay una solución para mi problema

Ahora, hago el cambio que me indicas y obtengo el siguiente mensaje:


Project regservic.exe raised exception class 'External:SIGSEGV'


Donde "regservic", es el nombre de mi proyecto

¿Que estará sucediendo?


De antemano gracias por la ayuda de todos...y ..pues sigo pendiente de sus comentarios y buscando también por mi cuenta...

Saludos...
Responder Con Cita
  #12  
Antiguo 10-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola Kelvin.

Dejá el evento OnClose tál como lo tenías:
Código Delphi [-]
...
procedure TfrmClientes.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction:= caFree;
end;

Y agregá el evento OnDestroy:
Código Delphi [-]
procedure TfrmClientes.FormDestroy(Sender: TObject);
begin
  frmClientes:= nil; 
end;


Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 10-05-2011 a las 02:57:09.
Responder Con Cita
  #13  
Antiguo 10-05-2011
Kelvin Kelvin is offline
Registrado
NULL
 
Registrado: may 2011
Posts: 7
Poder: 0
Kelvin Va por buen camino
Bravo!!!!....

Aplique los cambios que me indicas y efectivamente ahora funciona a la perfección.

Agradesco tu interes y colaboración, asi mismo, quiero hacer extensivo mi agradecimiento para con todos los que aportaron su tiempo y dedicacion para ayudarme: Caral, luk2009,beginner01 y ecfisa....muchas gracias a tod@s...!!

Saludos..
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
Problema con el manejo de las ventanas dentro de la aplicacion maxibaco Varios 2 28-11-2006 20:01:09
Ventanas,Ventanas Mdi=Dolor de cabeza ? IVAND Varios 7 08-05-2006 17:27:24
Ayuda urgente con manejo de ventanas y validación de usuario TrUnkS Varios 1 27-12-2005 09:04:22
Manejo de Ventanas Epunamun Varios 4 12-12-2005 23:25:38
Manejo de ventanas con MDI walito Varios 2 30-06-2005 20:43:05


La franja horaria es GMT +2. Ahora son las 22:21:17.


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