salir de un ejecutable

onpg2002
23 de Enero del 2004
Tengo el sig problema........
El proyecto consiste solo de un programa principal y un menu ...................
Al hacer el ejecutable, puedo salir del programa solo por el menu salir, pero si lo cierro de la esquina superior derecha de la ventana, no me deja salir........
Aque adjunto el codigo del programa principal, para ver si me pueden ayudar.........

* Quitamos cualquier mensaje a pantalla
SET TALK OFF

* A continuación limpiamos pantalla, cerramos todo y liberamos la memoria
CLEAR
CLOSE ALL
CLEAR ALL

DO menuprim.mpr
READ EVENTS
CLOSE DATABASE ALL
RELEASE EXTEND ALL
QUIT

Delio Andres Perez Saavedra
23 de Enero del 2004
Hola. Soy programador nuevo en Foxpro 6.0 y deseo aprender a hacer programas ejecutables. Me puedes explicar como se hacen. Gracias

DELIO

SAMUEL SMH
23 de Enero del 2004
Bueno a mi parecer no esta del todo bien cerrar una aplicacion de esa forma ya que dañarian algunas tablas, es mas podria hasta dañarse tu base de datos por que no estas cerrandolo como deberias paso por paso, es como si se fuera la luz y no guardes nada y esto podria traer daños irreparables.

P.D. No veo por que se matan queriendo salir de esa manera si desde el mismo menu pueden hacerlo y muy bien.

Saludos

Raul
23 de Enero del 2004
Estimado Samuel:

No es que nos matemos cerrando las aplicaciones de esta manera, pero el procedimiento es una forma de evitar esos graves errores a los que te refieres.

Muchas veces cuando estas creando tus aplicaciones te olvidas de quitar un SET STEP ON que al compilar tu proyecto y distribuirlo es algo que te deja colgada la aplicacion.

Si eso nunca te ha ocurrido en ninguna de tus aplicaciones te felicito, por que eres muy pulcro al escribir tu codigo, ojala todos fueramos tan cuidadosos.

Saludos

Alex
23 de Enero del 2004
Quetal Amigos.

Estoy de acuerdo con Raúl.

Desde luego la utilización de ON SHUTDOWN de forma indebida podría ocasionar problemas pero señores ! SOMOS PROGRAMADORES ¡ y podemos prever cualquier problema que pudiera suceder, por ejemplo utilizando un procedimiento como se explica en el texto pegado por Raúl.

Nosotros estamos en la obligación de ofrecer a nuestros clientes un producto eficiente, no limitado ha hacer algunas operaciones de una sola forma, además al utilizar este comando podemos hacer determinados procesos si el usuario cierra de manera Abrupta la aplicación usando CTRL + ALT + DELETE por ejemplo.


Alex Vargas

Raul
23 de Enero del 2004
Tomado de otro foro:

Cómo evitar el mensaje no puede salir de Visual de FoxPro

¿Ha intentado cerrar su aplicación, sólo para recibir el mensaje que no puede? Aquí está la historia.

Usted ha desarrollado su aplicacion y la ha entregado al usuario. Todo está muy bien. Entonces usted recibe una llamada telefónica. El usuario intentó cerrar el app, pero todo que sucedió es que apareció un mensaje: "no puede salir de Visual FoxPro " (véase el cuadro 1). ¿Por qué? Porque el uso todavía está en un evento de lazo.

Figura 1: El temido mensaje Cannot Quit
En alguna parte en la lógica que controla el app, usted tiene código que parezca como esto:

DO MainMenu.MPR
READ EVENTS

Once the program has been put in an event loop (which is what READ EVENTS does), you won't be able to close down until you have exited the event loop. You do that with the CLEAR EVENTS command. You would normally execute CLEAR EVENTS whenever the user signals that they want to close the application – in the Exit command from the File menu, for example.

Una vez que el programa se haya puesto en un lazo de evento (que es lo que lo hacen los READ EVENTS), usted no podrá cerrarlo hasta que se salga del lazo del evento. Usted hace eso con el comando CLEAR EVENTS. Usted ejecutaría normalmente CLEAR EVENTS siempre que el usuario señale que desean cerrar el mismo, en el comando de salida del menú de archivo, por ejemplo.

¿Pero qué si el usuario intenta cerrar la aplicacion haciendo click en la caja cercana en la barra del título? ¿O cerrando Windows por sí mismo mientras que la aplicación está funcionando? En esos casos, el programa no habrá tenido una oportunidad de ejecutar CLEAR EVENT. El lazo del evento sigue estando activo, así que no puede parar el mensaje que aparece.

Para evitar esto, utilice el comando ON SHUTDOWN. Esto trabaja de la misma manera que otros comandos "ON" de VFP, por ejemplo EN ERROR, en que especifica una acción que deba ser tomada cuando ocurre cierto evento. En este caso, el evento es cualquier tentativa de cerrar la aplicación, por cualesquiera medios.

Por lo tanto todo lo que usted tiene que hacer es ejecutar ON SHUTDOWN CLEAR EVENTS. Usted hace este cerca del principio del programa; en cualquier caso antes de READ EVENTS. Una vez que usted haya hecho eso, el usuario no debera ver nunca otra vez el mensaje de que n o puede salir de VFP. Cuando el usuario hace clic en la caja cercana en la barra del título, el programa ejecutará ON SHUTDOWN, que alternadamente saldrá del lazo del evento y pasará control al código que sigue a READ EVENTS. Final del problema.

No pasa nada

No absolutamente. Ahora intente correr el app desde ambiente de desarrollo de VFP. Cierre el app. Entonces intente salir de FoxPro visual. No existe ningúna diferencia si usted utiliza el comando de la salida del archivo, click en la caja cercana en la barra del titulo o escriba QUIT en la ventana de comandos. El resultado es igual: nada sucede.

¿Por qué? Porque el comando ON SHUTDOWN todavía está en efecto. En vez del cierre, VFP esta simplemente ejecutando CLEAR EVENTS, el cual no tiene ningún efecto si usted está en el ambiente de desarrollo y no hay un programa funcionando.

To avoid this, go back to the app, and add another ON SHUTDOWN command. This time, make it simply ON SHUTDOWN by itself. Put this in the clean-up code, that is, somewhere after the READ EVENTS. The effect will be to cancel the original ON SHUTDOWN.
Para evitar esto, vaya de nuevo al app, y agregue otro comando ON SHUTDOWN. Esta vez, escriba simplemente ON SHUTDOWN por sí mismo. Ponga esto en el código de limpieza, es decir, en alguna parte después de READ EVENTS. El efecto será cancelar el original ON SHUTDOWN.

This pair of commands – ON SHUTDOWN CLEAR EVENTS and ON SHUTDOWN by itself – are the minimum you need to close down gracefully. But, depending on how the app is structured, you might need to do more.
Este par de comandos– ON SHUTDOWN CLEAR EVENTS y ON SHUTDOWN por si mismo –es lo mínimo que usted necesita cerrar su aplicacion. Pero, dependiendo de cómo se estructura el app, usted puede que necesite hacer más.

Limpiando
En nuestras propias aplicaciones, el comando de la salida del archivo realiza cierta cantidad de limpieza antes de ejecutar CLEAR EVENTS. Específicamente, itera a través de la colección de las formas abiertas (es decir, la colección de las formas en _SCREEN), cerrando cada forma alternadamente. Como así pues, incita al usuario a tratar con cualquier edición no salvada. En ese punto, el usuario puede decidir cancelar la salida, en tal caso la rutina de salida dejará la forma relevante abierta y se refrenará de despejar el lazo del evento.

La aplicacion necesita pasar por este mismo procedimiento no importa cómo el usuario intente cerrarla. Para alcanzar esto, ponemos el proceso antedicho en un procedimiento, que llamamos FileExit. El comando de salida en el menú de archivo llama este procedimiento con un simple DO FileExit. Y asi mismo lo hace el comando ON SHUTDOWN. Es decir en vez de ejecutarse ON SHUTDOWN CLEAR EVENTS, ejecutamos ON SHUTDOWN FileExit. Esa manera, el procedimiento de parada es siempre igual, no importando lo que el usuario hizo para iniciarlo.
Mike Lewis Consultants Ltd. April 1999.