Mejor manera de ocultar la ventana principal de VFP

1,806 views
Skip to first unread message

programes agora

unread,
Aug 2, 2013, 5:57:13 AM8/2/13
to publice...@googlegroups.com
Hola a todos, 
después de leerme la ayuda de VFP, para ocultar la ventana principal,
no me hace caso del config.fpw, i si la hago invisible, me queda siempre 
un proceso por cerrar y a partir de aqui, tengo el fichero ocupado.
Grácias de antemano a todos.

Jose Ferret

Fernando D. Bozzo

unread,
Aug 2, 2013, 8:18:55 AM8/2/13
to publice...@googlegroups.com
Hola José:

Aunque la pregunta es fácil de responder, lo complejo puede llegar a ser cómo estés manejando el cierre de tu aplicación, que haga que siempre te quede algún proceso por cerrar.
Lo que te puede servir es que en modo Desarrollo la ventana principal sea visible para poder depurar y ver cualquier mensaje que se muestre en la misma y que no deba, y en modo Producción que te oculte la ventana para que sólo se vean las ventanas.

Esta es una estructura de directorios típica de proyecto FoxPro:

dir.raiz\
        \datos
        \config <== AQUI PONER EL CONFIG.FPW
        \clases
        \forms
        \reportes
        \include
        \prgs

En el directorio raíz debe ir el proyecto y el programa principal (MAIN.PRG o como se llame), el resto de componentes conviene ponerlos en los subdirectorios correspondientes.

El CONFIG.FPW debería contener como mínimo esto:
SCREEN=OFF
RESOURCE=OFF

Tu proyecto PJX debe incluir el archivo CONFIG.FPW

Tu programa principal debería tener una estructura similar a esta:

* MAIN.PRG
SET PATH TO DATOS;CLASES;FORMS;REPORTES;PRGS;INCLUDE; && NO PONER EL DIRECTORIO CONFIG!
(Aquí debería configurar los demás SET)
(Aquí debería invocar al form principal)

Luego, al ejecutar el programa en desarrollo (Ej: DO MAIN.PRG) no encontrará al CONFIG.FPW, por lo que mostrará la ventana principal y así podés depurar y probar cosas desde la ventana de comandos.

Al compilar tu EXE, como el CONFIG.FPW debe estar incluido lo encontrará siempre, y pondrá la ventana principal oculta (equivalente a Visible=.F.)

Lo único que tendrías que prestar mucha atención es a la recolección de basura (garbage collect) de cada uno de los métodos que hagas y a usar un buen control de errores, por ejemplo con TRY/CATCH. La recolección de basura consiste en que si un método abre una tabla o una base de datos, debe cerrarlas al finalizar; si crea objetos, debe liberarlos, si abre una conexión con una BDD externa (Oracle, MySQL, etc), debe cerrar la conexión, etc. Obviamente todo esto depende de cómo sea la arquitectura de tu APP.

Respecto al manejo de los errores, que es un tema muy importante y al que muchas veces no se le da la importancia que tiene, todos los errores deben llegar hasta la interfaz y ser mostrados ahí, suponiendo que trabajes en capas (datos, negocio, interfaz)

Un esquema que te puede servir es usar esta estructura en tus rutinas de negocio y datos:

TRY
   LOCAL loEx as Exception, lnCodError
   lnCodError = 0
   * Aquí el resto de tu programa

CATCH TO loEx
   * Aquí alguna rutina para poder suspender solo en Desarrollo y para LOG del error.
   THROW && Relanza el error hasta que llegue a la interfaz

FINALLY
   * Aquí cierre de tablas, conexiones, liberación de objetos, etc.
ENDTRY


Y en tus pantallas, desde donde invoques alguna funcionalidad (típicamente los botones de comando y combobox), podrías tener esta estructura:

TRY
   LOCAL loEx as Exception, lnCodError
   lnCodError = 0
   * Aquí el resto de tu programa

CATCH TO loEx
   * Aquí alguna rutina para poder suspender solo en Desarrollo y para LOG del error.
   * SOLO EN LA INTERFAZ DEBERÍAN MOSTRARSE LOS ERRORES
   MESAGEBOX( "Error " + TRANSFORM(loEx.ErrorNo) + ", " + loEx.Message + CHR(13) ;
      + loEx.Procedure + ", línea " + TRANSFORM(loEx.LineNo) )

FINALLY
   * Aquí cierre de tablas, conexiones, liberación de objetos, etc.
ENDTRY


Espero que te sirva para comenzar,

Saludos.-



Luis Maria Guayan

unread,
Aug 2, 2013, 8:21:47 AM8/2/13
to publice...@googlegroups.com
Mira este artículo que te ayudará a crear una estructura tipo para tus programas principales.

-- Ejecuto un EXE de VFP y finaliza instantáneamente --
http://www.portalfox.com/article.php?sid=977

La mejor manera de ocultar la ventana de VFP es tener en el archivo Config.fpw una linea con:

SCREEN=OFF


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Víctor Hugo Espínola Domínguez

unread,
Aug 2, 2013, 12:56:49 PM8/2/13
to publicesvfoxpro
Hola José

Asegúrate que tu formulario principal tenga SHOWWINDOW = 2

Saludos,
Víctor.

Víctor Enrique Navarro Hoyos

unread,
Aug 2, 2013, 7:22:16 PM8/2/13
to publice...@googlegroups.com
Fernando, ¿cual es la mejor recomendación para ubicar el CONFIG.FPW?, Es decir, es mejor que esté en la Raíz o un subdirectorio específico; o por el contrario, ¿es indiferente?

Ricardo Pina

unread,
Aug 2, 2013, 7:24:18 PM8/2/13
to Grupo VFP
Hola Victor
 
No soy Fernando, pero si lees bien la muy buena explicación que dió ya esta contestada tu pregunta.
 
Saludos


El 2 de agosto de 2013 20:22, Víctor Enrique Navarro Hoyos <eres.u...@gmail.com> escribió:
Fernando, ¿cual es la mejor recomendación para ubicar el CONFIG.FPW?, Es decir, es mejor que esté en la Raíz o un subdirectorio específico; o por el contrario, ¿es indiferente?



--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Luis Maria Guayan

unread,
Aug 3, 2013, 8:29:28 PM8/3/13
to publice...@googlegroups.com
Lo mejor es que este incluido en tu ejecutable, para que solo afecte al ejecutable y no al entorno de desarrollo u otro ejecutable en la misma carpeta.

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

El 02/08/2013 20:22, Víctor Enrique Navarro Hoyos escribió:

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Aug 5, 2013, 7:11:18 PM8/5/13
to publice...@googlegroups.com
Hola si estas trabajando en todos tus proyecto con un Formulario de nivel superior es mejor que este en la raíz y no incluido en el proyecto.



Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)



Reply all
Reply to author
Forward
0 new messages