FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Forms como el msn
Hola amigos estoy tratando de crear ventanas que se abran en tiempo de ejecución, pero que sean una nueva ventana asi como otro programa, recuerdan el msn cuando inician conversación con alguien se levanta otra ventanita en la barra de tareas cosa que si cierro la principal no se cierren las otras ventanitas.
Yo probe esto pero no funcionó? Por otro lado, como hago para que además de crearme la ventana necesito unos campos Memos y como hago para tener el control de esos memos desde mi forma principal. La verdad esto me esta rompiendo la cabeza alguna ayuda por fa... |
#2
|
||||
|
||||
Cita:
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:
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:
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
Esto asegurará que si el formulario que se cierra es el último entonces se llamará a Application.Terminate. // Saludos |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
Cita:
Creo que hay una solución bastante sencilla. Creas una nueva ventana, será la principal, pero en el OnCreate, hará los siguiente: 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. |
#5
|
||||
|
||||
Despues de releer todo el hilo, creo que la solución es mucho más simple de lo comentado en todos los mensajes, incluido el anterior posteado por mi.
Cita:
Ahí tienes un error: estas poniendo Tform .... ¿pero qué Tform? TForm a secas es la clase base para todas las ventanas. Si entiendo bien, tienes que hacer esto: - Diseñas 3 ventanas form1, form2 y form3. (simplemente File --> new --> Form, 2 veces, para añadir los form2 y form3) - Vas a Project, Options, y quitas el form2 y form3 de la zona Autocreate, y los pones en Available. - en el Form1 pones 2 botones, y en sus eventos OnClick añades:
Tanto en form2 como en form3, en sus eventos Onclose añades: Donde X será el número 2 o bien 3. Listo, ya tienes funcionando los form2 y form3 totalmente independientes, y desde form1 puedes crearlos. Espero que sea lo que necesitas. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
Cita:
Creo que lo más adecuado es lo que plantea JXJ: 1. En el evento OnCloseQuery del formulario principal pones Accept := false para que no se cierre y Hide para que se oculte y de la impresión de estar cerrado. 2. Colocas un icono en la bandeja del sistema que de la opción de terminar la aplicación con Application.Terminate. // Saludos |
#7
|
||||
|
||||
Simplemente espero una respuesta por parte de Clantt, a ver quién lleva la razón , atento a mis explicaciones maestro :
Cita:
Cita:
Cita:
Lo dicho, Clantt nos dirá exactamente qué quiere hacer.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#8
|
||||
|
||||
Cita:
// Saludos |
#9
|
||||
|
||||
Estamos hablando por hablar , pero bueno, te contesto
Cita:
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
|