Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Clantt
que si cierro la principal no se cierren las otras ventanitas.

El problema es que Delphi siempre se cerrará cuando se cierre el formulario principal. El formulario principal es el primero que se crea mediante

Application.CreateForm(...);

en el dpr.

CreateForm asigna a la propiedad MainForm (de solo lectura) del objeto Application el formulario creado. Cuando un formulario se cierra pregunta si él es el principal

if Application.MainForm = Self then Application.Terminate

y Application.Terminate es quien se encarga de terminar la aplicación.

Con más precisión, Application.Terminate ocasiona que la propiedad Terminated de Application sea true lo cual es la condición de salida del ciclo principal en Application.Run:

Código Delphi [-]
repeat
  try
    HandleMessage;
  except
    HandleException(Self);
  end;
until Terminated

Dos opciones que se me ocurren ahora son:

1. Usas un formulario principal de palo que esté escondido y un segundo formulario que haga las veces del principal.

2. Alteras la forma en que Delphi maneja el ciclo principal. Por ejemplo, sustituyes todos los

Application.CreateForm(TFormN, FormN)

por

FormN := TFormN.Create(Application);

y sustituyes la línea

Application.Run

en el dpr por tu propio ciclo:

Código Delphi [-]
repeat
  try
    Application.HandleMessage;
  except
    Application.HandleException(Application);
  end;
until Application.Terminated;

Claro que en este caso tienes que asegurarte de que en algún momento se cierre la aplicación (usando, por ejemplo, Application.Terminate) o podría sucederte que se cierren todos los formularios y la aplicación se quede colgada.

Para ello podrías agregar en el evento OnClose de cada formulario algo como

Código Delphi [-]
Action := caFree;

if Screen.FormCount = 1 then
  Application.Terminate;

Esto asegurará que si el formulario que se cierra es el último entonces se llamará a Application.Terminate.

// Saludos
Responder Con Cita
  #2  
Antiguo 18-10-2005
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 24
JXJ Va por buen camino
Usa los componentes TCoolTrayIcon

La ventaja es que tiene la opcion de cerrar y captura
el mensaje de Application.Terminate //creo que es este
y revisa si no hay un acondición dada, el cooldemo
tiene la opcion habilitada por un checkbox,
facilmente la pueda cambiar. por un codigo o la opcion
de una propiedad del componente.

DE esta manera tu forma principal no se cierra hasta que
como con el messenger usas la opcion de cerrar.
Yo lo he usado con un popupmenu, que se muestra por que
pongo la forma principal en el systray. igual que el messenger
puedo ocultar y mostrar la forma principal

ahora el demo que hice , anda por ahi perdido.
que implementa lo que dices. deja lo arreglo que
tengo uso unos componentes no estandar de delphi7
y te daria muchos errores al abrir. pues creo tu no los tienes.
mientras puedes familiarizarte con el cooltrayicon
Responder Con Cita
  #3  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por Clantt
cosa que si cierro la principal no se cierren las otras ventanitas.
¿Quién ha dicho que esa ventana es la principal?, A ti te parece que es la principal .

Creo que hay una solución bastante sencilla.

Creas una nueva ventana, será la principal, pero en el OnCreate, hará los siguiente:

Código Delphi [-]
application.ShowMainForm:= false;
-Crear y mostrar una segunda ventana que actuará de Principal 
(de cara al usuario)
Esta ventana, es la primera que pones en Projects, Options, en la zona de AutoCreate, y es la que mandas a cerrar desde un menu que diga Salir, (esta opción estará en la segunda ventana.

Las demás ventanas las creas dinámicamente desde la segunda Ventana y las liberas al cerrarlas, como éstas ya no son la principal, simplemente tu programa se quedará por ahí funcionando.

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: 18-10-2005 a las 09:06:21.
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


La franja horaria es GMT +2. Ahora son las 21:39:37.


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