problema al cerrar aplicación queda corriendo proceso

2,268 views
Skip to first unread message

leonardo trujillo

unread,
Sep 4, 2012, 12:51:32 AM9/4/12
to grupo google vfp
hola gente
tengo un problema y no me doy cuenta de la solución ¿me pueden sugerir algo?
tengo mi inicio.prg y al dar salir al botón del form (que solo tiene thisform.release) me queda colgada la aplicación en los procesos de windows xp
está en vfp6 y así está el inicio.prg

CLEAR
_screen.visible = .f.

SET SAFETY OFF
SET DATE BRITISH
SET TALK ON
SET CENTURY ON
SET DELETE ON
set exclusive off
SET MULTILOCKS ON

open database .\data\afiliados
open database .\data\nuevo

DO FORM altadelega2

READ EVENTS


close tables all
close data
clear all class
thisform.release
cancel
ON SHUTDOWN CLEAR EVENTS

Walter R. Ojeda Valiente

unread,
Sep 4, 2012, 12:56:52 AM9/4/12
to publice...@googlegroups.com
En el botón "Salir" de tu formulario agrégale CLEAR EVENTS.

Saludos.

Walter.




Date: Tue, 4 Sep 2012 01:51:32 -0300
Subject: [vfp] problema al cerrar aplicación queda corriendo proceso
From: trujillo...@gmail.com
To: publice...@googlegroups.com
--
 
 
 

leonardo trujillo

unread,
Sep 4, 2012, 1:07:29 AM9/4/12
to publice...@googlegroups.com
gracias walter por tu respuesta, pero ahora cuando salgo me aparece una ventana que dice: THISFORM can only be used within a method
y el botón help me lleva a:

"name" can only be used within a method (Error 1929)

One of the following commands was used outside of a method: THIS, THISFORM, or THISFORMSET.

  • You used the statement in a procedure, but it can only be used within a method.

    Move the THIS, THISFORM, or THISFORMSET command into the appropriate method.


¿a qué se debe?

--
 
 
 

Walter R. Ojeda Valiente

unread,
Sep 4, 2012, 1:16:04 AM9/4/12
to publice...@googlegroups.com
Eso significa que estás usando THISFORM afuera de un formulario, solamente puedes usarlo dentro de un formulario, en algún método del mismo.

Saludos.

Walter.





Date: Tue, 4 Sep 2012 02:07:29 -0300
Subject: Re: [vfp] problema al cerrar aplicación queda corriendo proceso
--
 
 
 

leonardo trujillo

unread,
Sep 4, 2012, 1:19:41 AM9/4/12
to publice...@googlegroups.com
ok
pero eso ocurre luego de poner clear events en el botón salir del form
el botón salir quedó
thisform.release
clear events



--
 
 
 

Walter R. Ojeda Valiente

unread,
Sep 4, 2012, 1:21:28 AM9/4/12
to publice...@googlegroups.com
Porque en tu programa INICIO.PRG estás usando THISFORM, allí está el problema.

Saludos.

Walter.





Date: Tue, 4 Sep 2012 02:19:41 -0300
--
 
 
 

leonardo trujillo

unread,
Sep 4, 2012, 1:22:24 AM9/4/12
to publice...@googlegroups.com
recién lo acabo de ver
sí sí tienes razón
lo saqué y anduvo a la perfección, ya no queda colgado
muchas gracias

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 10:37:35 AM9/4/12
to publice...@googlegroups.com
Leonardo,

Veo que te falta cerrar la instrucción ON SHUTDOWN. Según recuerdo, esta funciona como todos los bucles, es decir, necesita una instruccion de inicio y un de cierre.

Revisa este artículo que aclarará muchas dudas sobre este tema.


Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 10:42:55 AM9/4/12
to publice...@googlegroups.com
Gracias Fox Learner, ya había dado con el artículo, lo hice pero no funcionó, me anduvo la solución de Walter.
De todas formas no sé por qué hay que poner el Clear Events cuando cierro el formulario y no funciona desde el prg.


--
 
 
 

FidelJ

unread,
Sep 4, 2012, 11:00:47 AM9/4/12
to publice...@googlegroups.com
En tu procedimiento main
después de las instrucciones de implementación
ON SHUTDOWN DO RUTISHUT
release Formulario ppal
PUBLIC FoPpal
DO FORM Formulario Ppal NAME foPpal
READ EVENTS

procedure rutishut
******************
release FoPpal && Quita el Form. Ppal
&& Se puede verificar que no queden otros forms abiertos,
&& aunque eso también se puede hacer en el Destroy del Form. Ppal.
&& 
CLOSE ALL
SET PRINTER TO
CLOSE DATABASES
CLEAR EVENTS
QUIT    && furioso, se puede evitar con Version() para la interactiva
ENDPROC

En el Unload del formulario principal, 
RutiShat()

En el botón de cierre del form principal
Thisform.Release

Esto asegura que lo puedo cerrar con el botón o desde la barra del formulario. O desde cualquier Procedimiento que llame a RutiShut().

Fox Learner

unread,
Sep 4, 2012, 11:12:29 AM9/4/12
to publice...@googlegroups.com
La verdad no sé si tu inicio.prg sea tu main.prg del sistema. Al parecer no, porque dices que lo activas junto con el form.

Si ese es el caso, te está faltando establecer un programa main.prg y darle click derecho "establecer como principal".

Como hacer un main.prg ?

Teclea por favor:

El programa principal o main.prg

En el cuadro de busqueda de este foro y revisa el primer enlace.

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 11:17:23 AM9/4/12
to publice...@googlegroups.com
gracias FidelJ, lo probaré.
Fox Learner al abrir este hilo verás que uso un inicio.prg que es el principal y ahí llama al primer form
saludos

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 11:22:29 AM9/4/12
to publice...@googlegroups.com
Mi sugerencia es que revises el enlace que te comenté y veas como activar una rutina de baja. Es decir, en vez de hacer:

ON SHUTDOWN CLEAR EVENTS

Llama a una rutina de baja en el primer shutdown

ON SHUTDOWN BAJA.PRG

Y dentro de ese programa de baja, pones otro ON SHUTDOWN sin parametros.

Revisa el enlace que te menciono y notarás un ejemplo como te indico.

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 11:22:50 AM9/4/12
to publice...@googlegroups.com
FidelJ
según lo que me indicas ¿mi main quedaría así? mi duda está luego de que habro las bd


CLEAR
_screen.visible = .f.
SET SAFETY OFF
SET DATE BRITISH
SET TALK ON
SET CENTURY ON
SET DELETE ON
set exclusive off
SET MULTILOCKS ON
open database .\data\afiliados
open database .\data\nuevo
DO FORM altadelega2
ON SHUTDOWN DO RUTISHUT
release Formulario altadelega2
PUBLIC FoPpal
DO FORM altadelega2 NAME foPpal
READ EVENTS

procedure rutishut
******************
release FoPpal && Quita el Form. Ppal
&& Se puede verificar que no queden otros forms abiertos,
&& aunque eso también se puede hacer en el Destroy del Form. Ppal.
&& 
CLOSE ALL
SET PRINTER TO
CLOSE DATABASES
CLEAR EVENTS
QUIT    && furioso, se puede evitar con Version() para la interactiva
ENDPROC

_____________________________________________________________________________________
--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 11:30:19 AM9/4/12
to publice...@googlegroups.com
Leonardo,

Noto que en el ejemplo del rutishut que pones, te sigue faltando un ON SHUTDOWN sin parametros para completar el bucle.

Con eso debe funcionar, y como indica el articulo del portalfox, debe haber una sentencia clear events entre ambos shuts.

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 11:34:40 AM9/4/12
to publice...@googlegroups.com
¿dónde lo pongo? ¿en el procedimiento antes del CLOSE ALL? ¿o fuera luego del READ EVENTS?
es que no entiendo la secuencia del artículo

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 11:38:22 AM9/4/12
to publice...@googlegroups.com
Revise por favor, con atención este ejemplo:

* Programa Principal 

CLEAR 
_SCREEN.CAPTION="Mi Sistema. Version 2012 1.1" 
SET SYSMENU TO 
_SCREEN.PICTURE="UNIDAD:\RUTA" 
_SCREEN.WINDOWSTATE=2 


*configurando el entorno del sistema 
PUSH MENU _MSYSMENU 
SET DEFAULT TO "UNIDAD:\RUTA" 
xx = "TABLAS, FORMS, REPORTS, BACKUP,IMAGENES,ICONOS,ETC," 
SET PATH TO '&xx' ADDITIVE 

SET SAFETY OFF 
SET DATE ITALIAN 

SET TALK ON 
SET CENTURY ON 
SET DELETE ON 

ON SHUTDOWN DO BAJASIS 

DO FORM "Inicio.scx" 
DO "main.mpr" 
READ EVENTS 

*finaliza el programa 

ON SHUTDOWN 
CLEAR EVENTS 
POP MENU _MSYSMENU 
CLOSE ALL 
RETURN 

* Procedimiento para cerrar Fox desde el ícono X. 

PROCEDURE BAJASIS 

IF MESSAGEBOX("DESEA SALIR DEL SISTEMA...? ",4+32,"SALIR") = 6 

SET SAFETY OFF 
close databases 

CLEAR EVENTS 
*RETURN 
POP MENU _MSYSMENU 
ON SHUTDOWN 
CLOSE ALL 

QUIT 
ENDIF 
ENDPROC 

Saludos!  

leonardo trujillo

unread,
Sep 4, 2012, 11:49:03 AM9/4/12
to publice...@googlegroups.com
o sea

¿dónde lo pongo? ¿en el procedimiento antes del CLOSE ALL? ¿o fuera luego del READ EVENTS?
Respuesta: fuera del procedimiento, luego del READ EVENTS
Gracias

te comento que estuve leyendo el hilo donde muestras ese main.prg ¿qué hace DO "main.mpr"?
¿en tu form inicio.scx tienes un botón salir, cómo sales? por lo visto lo haces desde la ventana de vfp, que yo no la uso

gracias

2012/9/4 Fox Learner <thenewin...@gmail.com>

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 12:05:23 PM9/4/12
to publice...@googlegroups.com
Do main.mpr, llama al MENU principal del sistema. No llama a ningun form.

Como en cualquier sistema (Word, Excel, etc), tengo dos formas de salir:

1. Por medio del menú, donde tengo una opción salir y dentro de esa opción llamo al procedimiento de BAJA.

2. Por medio de la X de la pantalla principal u objeto _Screen de VFP.

Cuando el usuario hace click en la X, VFP llama al procedimiento de BAJA.PRG

Supongo que ya lo solucionaste...

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 12:29:03 PM9/4/12
to publice...@googlegroups.com
ahora sí
entonces baja.prg también iba en otro lado (eso no se mencionaba en el hilo donde exponían sobre el tema)
así que quedaría así: el inicio.prg queda como lo escribí antes y en el botón salir del form ppal luego del release hago un do de baja.prg.
yo closable lo tengo en .f., aunque si lo pongo en .t. supongo que el on shutsown baja debe ejecutarse en ese caso
¿está bien?

--
 
 
 

Walter R. Ojeda Valiente

unread,
Sep 4, 2012, 1:00:02 PM9/4/12
to publice...@googlegroups.com
El comando CLEAR EVENTS detiene el procesamiento de los eventos y continúa con la ejecución de la línea siguiente al READ EVENTS que lo invocó.

Si no lo colocas, o lo colocas en el lugar inadecuado, cosas extrañas podrían ocurrirte.

Cerrar un formulario no detiene el procesamiento de los eventos.

Saludos.

Walter.





Date: Tue, 4 Sep 2012 11:42:55 -0300
Subject: Re: [vfp] Re: problema al cerrar aplicación queda corriendo proceso
From: trujillo...@gmail.com
To: publice...@googlegroups.com
--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 1:06:18 PM9/4/12
to publice...@googlegroups.com
Closable aplica al objeto _screen ? .. Pensé que eso era para forms..

Con la frase "procedimiento de baja" (o baja.prg) me refería a cualquier rutina que dé de baja al sistema.

En tu ejemplo, es RUTISHUT.PRG

En mi ejemplo es BAJASIS.PRG

Disculpa si a veces no te entiendo, pero es dificil comprendernos "con puros teclazos" jeje

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 1:06:29 PM9/4/12
to publice...@googlegroups.com
gracias walter, clarísimo

--
 
 
 

leonardo trujillo

unread,
Sep 4, 2012, 1:10:10 PM9/4/12
to publice...@googlegroups.com
estimadísimo fox learner jeje
te dije que no uso el objeto _screen (la oculto, como podés ver en mi main.prg)
y si lees bien me refiero a mi form ppal, dije "... y en el botón salir del form ppal..."
lo del procedimiento de baja lo entendí: gracias
y es verdad, difícil entendernos, pero a la larga "sale con fritas"
saludos

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 1:14:08 PM9/4/12
to publice...@googlegroups.com
Retiro lo dicho la propiedad closable también aplica al objeto screen, pero yo no lo había usado.

Un simple, en la ventana de comandos:

_screen.Closable= .F.

Inhabilita la X de la ventana principal del Fox.

Ya lo solucionaste ? ..

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 2:18:04 PM9/4/12
to publice...@googlegroups.com
sí sí, gracias a ti y a walter
no sé cómo dar por finalizado estando en gmail
saludos

2012/9/4 Fox Learner <thenewin...@gmail.com>

--
 
 
 

Fox Learner

unread,
Sep 4, 2012, 9:16:00 PM9/4/12
to publice...@googlegroups.com
Bien por ti! Me da gusto.

En los foros, se acostumbra dejar comentada la solución para que cuando otro cristiano (o ateo, dependiendo jeje) necesite dar con la solución del problema, pueda buscarla con comodidad.

En fin, solo es una sugerencia para irnos acostumbrando a ser cada día más profesionales.

Saludos!

leonardo trujillo

unread,
Sep 4, 2012, 9:59:08 PM9/4/12
to publice...@googlegroups.com

Pensé que siguiendo el hilo quedaba claro. De hecho si lees bien, más arriba encontrarás que puse "entonces..." y me respondí armando la respuesta de los piques que me dieron. Pero mañana pongo la solución y doy por cerrada la pregunta.
Muchas gracias a los que participaron.
Saludos

--
 
 
 

Fox Learner

unread,
Sep 5, 2012, 10:45:47 AM9/5/12
to publice...@googlegroups.com
Gracias amigo Leonardo, al poner la solución afectarás para bien, quien sabe a cuantas vidas y familias jeje

Saludos!

leonardo trujillo

unread,
Sep 5, 2012, 1:45:50 PM9/5/12
to publice...@googlegroups.com
en son de salvar vidas y familias jeje (gracias a Fox Learner por la amable sugerencia), aquí va la solución (construída con las colaboraciones de Walter y Fox Learner):

Contenido del programa Inicio.prg

CLEAR
_screen.visible = .f.

SET SAFETY OFF
SET DATE BRITISH

SET TALK ON
SET CENTURY ON
SET DELETE ON
set exclusive off
SET MULTILOCKS ON

open database .\data\afiliados
open database .\data\nuevo

DO FORM socios


READ EVENTS

close tables all
close data
clear all class
cancel
ON SHUTDOWN CLEAR EVENTS

Luego en el evento click del botón Salir del form socios (el que abrí en Inicio.prg) van las siguientes 2 líneas:
thisform.release
CLEAR EVENTS

Espero les sea útil
saludos

El 5 de septiembre de 2012 11:45, Fox Learner <thenewin...@gmail.com> escribió:
Gracias amigo Leonardo, al poner la solución afectarás para bien, quien sabe a cuantas vidas y familias jeje

Saludos!

--
 
 
 

Reply all
Reply to author
Forward
0 new messages