Esto ocurre porque en nuestro programa principal debemos añadir un bucle de eventos para esperar los eventos del usuario, tales como un click de ratón o la pulsación de una tecla.
Un bucle de eventos comienza con un comando READ EVENTS y finaliza con un comando CLEAR EVENTS que retorna el control al programa que inició el bucle de eventos.
Si no incluimos en nuestro programa principal un comando READ EVENTS, el programa se ejecutará correctamente desde la ventana comandos de Visual FoxPro, pero cuando ejecutamos la aplicación desde el archivo EXE generado, esta aparecerá durante unos instantes y finalizará.
Una estructura de un programa principal deberia disponer los siguientes puntos:
- Establecer las configuraciones iniciales, inicializar variables, abrir bases de datos, etc.
- Establecer la interface inicial ejecutando un menú o un formulario.
- Establecer un bucle de eventos ejecutando el comando READ EVENTS.
- Establecer la finalización del bucle de eventos desde la opción Salir del menú o el botón Salir del formulario con el comando CLEAR EVENTS.
- Terminar el programa cerrando las bases de datos, liberando variables, etc.
El código de un programa principal siguiendo los pasos anteriores seria:
*----------------- *-- Principal.prg *----------------- *-- Configuraciones iniciales DO Inicio.prg *-- Mostrar la interface inicial DO MenuPrincipal.MPR && Menú principal *- ó DO FORM FormPrincipal && Formulario principal *-- Iniciar el bucle de eventos READ EVENTS *-- Terminar el programa DO Termina.prg
Recordar que el menú (en su opción Salir) o el formulario principal (en el botón Salir o en el método Destroy) deben incluir el comando CLEAR EVENTS para finalizar el bucle de eventos. Al ejecutar CLEAR EVENTS la ejecución del programa continúa en la línea siguiente al comando READ EVENTS.
Un breve ejemplo
El siguiente ejemplo es un programa que:
- Genera el archivo EJEMPLO.PRG que muestra un formulario principal como formulario de nivel superior e inicia un bucle de eventos. La finalización del bucle de eventos está alojada en el método Destroy del formulario.
- Crea y construye el proyecto EJEMPLO.PJX estableciendo como principal a EJEMPLO.PRG.
- Crea y genera el archivo ejecutable EJEMPLO.EXE a partir del proyecto EJEMPLO.PJX.
LOCAL lc SET SAFETY OFF TEXT TO lc NOSHOW *-- Inicio del programa Ejemplo.prg LOCAL loForm AS FORM _SCREEN.VISIBLE = .F. loForm = CREATEOBJECT('FormPrincipal') loForm.SHOW MESSAGEBOX("Se iniciará el bucle de eventos",64, "READ EVENTS") READ EVENTS MESSAGEBOX("Terminó el bucle de eventos",64, "CLEAR EVENTS") _SCREEN.VISIBLE = .T. RETURN DEFINE CLASS FormPrincipal AS FORM CAPTION = "Ejemplo de un bucle de eventos" SHOWWINDOW = 2 AUTOCENTER = .T. HEIGHT = 480 WIDTH = 640 ADD OBJECT cmdSalir AS COMMANDBUTTON WITH ; CAPTION = "Salir", ; HEIGHT = 40, WIDTH = 100, ; TOP = 400, LEFT = 500 PROCEDURE cmdSalir.CLICK RELEASE THISFORM ENDPROC PROCEDURE DESTROY CLEAR EVENTS ENDPROC PROCEDURE CLICK WAIT WINDOWS "Evento click en el formulario" NOWAIT ENDPROC ENDDEFINE *-- Fin de Ejemplo.prg ENDTEXT *-- Genero el PRG, PJX y EXE STRTOFILE(lc,"Ejemplo.prg") BUILD PROJECT Ejemplo.pjx FROM Ejemplo.prg BUILD EXE Ejemplo.EXE FROM Ejemplo.pjx MESSAGEBOX("Ahora ejecute el archivo EJEMPLO.EXE generado.",64,"Aviso")
Ejecutamos el archivo EJEMPLO.EXE que generamos con el código arriba descrito y comprobamos que el bucle de eventos queda esperando los eventos del usuario (en este caso el evento "Click" en el formulario).
Hasta la próxima,
Luis María
racias por compartir información excelente sobre la aplicación para eventos.
ResponderBorrarApp para Eventos