Saludos:
Ajunto remito una captura de pantalla cuando se está ejecutando el
comando Execute y el programa externo se intenta mover por la pantalla,
para que posicionarlo, he probado lo mismo con el comando WinExec y no
ocurre lo mismo algún comentario al respecto.
José Ramón Castro.
--
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Efecto no desea del comado Execute
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Efecto no desea del comado Execute
José Ramón,
> Ajunto remito una captura de pantalla cuando se está ejecutando el
> comando Execute y el programa externo se intenta mover por la pantalla,
> para que posicionarlo, he probado lo mismo con el comando WinExec y no
> ocurre lo mismo algún comentario al respecto.
Revisa el tercer parámetro de la función Execute(). Sirve para controlar si
el programa se parará mientras se ejecuta el proceso hijo o si continuará
ejecutándose. En el segundo caso, el handle que retorna te sirve para
comprobar con la función IsRunning() si el proceso hijo está todavía en
ejecución, y puedes terminarlo con la función KillProcess().
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> Ajunto remito una captura de pantalla cuando se está ejecutando el
> comando Execute y el programa externo se intenta mover por la pantalla,
> para que posicionarlo, he probado lo mismo con el comando WinExec y no
> ocurre lo mismo algún comentario al respecto.
Revisa el tercer parámetro de la función Execute(). Sirve para controlar si
el programa se parará mientras se ejecuta el proceso hijo o si continuará
ejecutándose. En el segundo caso, el handle que retorna te sirve para
comprobar con la función IsRunning() si el proceso hijo está todavía en
ejecución, y puedes terminarlo con la función KillProcess().
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Efecto no desea del comado Execute
Jose F. Gimenez escribió:
> José Ramón,
>
>> Ajunto remito una captura de pantalla cuando se está ejecutando el
>> comando Execute y el programa externo se intenta mover por la pantalla,
>> para que posicionarlo, he probado lo mismo con el comando WinExec y no
>> ocurre lo mismo algún comentario al respecto.
>
> Revisa el tercer parámetro de la función Execute(). Sirve para controlar si
> el programa se parará mientras se ejecuta el proceso hijo o si continuará
> ejecutándose. En el segundo caso, el handle que retorna te sirve para
> comprobar con la función IsRunning() si el proceso hijo está todavía en
> ejecución, y puedes terminarlo con la función KillProcess().
>
José F. Gimenez:
No es eso lo que me ocurre lo que ocurre es que la mover el formulario
del proceso hijo por la pantalla del proceso padre deja una estela que
en el dibujo que te muestro es la mancha blanca que se ve. ¿Me has
entendido?, una solución sería antes de la llamada al hijo minimizar el
padre y cuando termine el proceso volverlo a maximizar, eso si es que es
normal que al desplazarse deje esa estela, si es esa la solución puede
hacer el favor de enviarme un pedazo de código de como lo debo hacer, el
proceso lo hago desde este método y el formulario desde donde lo llamo
es el Application:oMainFrom.
METHOD ProgBenzing() CLASS TFormMenu
LOCAL cRuta := Application:CurrentDir() + "Benzing"
*
** Abrir la base de LlegadasTest y hacer un Zap de todos los registros
WITH OBJECT ::oDbfLlegadasTest
:lShared := .F.
:lOpen := .T.
IF :lOpen
IF :RecCount() > 0
:Zap()
ENDIF
ENDIF
:Close()
END
*
** Para ejecutar el programa debe de estar conectado
** el clubPoint o RelojClub
IF MsgYesNo("Para poder trabajar con el programa debes de tener" +
CHR(13) +;
"conectado el ClubPoint ó RelojClub, cuando lo tengas"
+CHR(13)+;
"conectado Pulsa SI para continuar y No para cancelar"
+CHR(13)+;
CHR(13) + " ¿Deseas Continuar y ejecutar el programa?", ;
AppData:gCaption)
** Ejecutar el programa externo del Reloj Benzing
Execute( cRuta + "Palomartorio.exe",, .T.)
*
ENDIF
RETURN Nil
José Ramón Castro.
> José Ramón,
>
>> Ajunto remito una captura de pantalla cuando se está ejecutando el
>> comando Execute y el programa externo se intenta mover por la pantalla,
>> para que posicionarlo, he probado lo mismo con el comando WinExec y no
>> ocurre lo mismo algún comentario al respecto.
>
> Revisa el tercer parámetro de la función Execute(). Sirve para controlar si
> el programa se parará mientras se ejecuta el proceso hijo o si continuará
> ejecutándose. En el segundo caso, el handle que retorna te sirve para
> comprobar con la función IsRunning() si el proceso hijo está todavía en
> ejecución, y puedes terminarlo con la función KillProcess().
>
José F. Gimenez:
No es eso lo que me ocurre lo que ocurre es que la mover el formulario
del proceso hijo por la pantalla del proceso padre deja una estela que
en el dibujo que te muestro es la mancha blanca que se ve. ¿Me has
entendido?, una solución sería antes de la llamada al hijo minimizar el
padre y cuando termine el proceso volverlo a maximizar, eso si es que es
normal que al desplazarse deje esa estela, si es esa la solución puede
hacer el favor de enviarme un pedazo de código de como lo debo hacer, el
proceso lo hago desde este método y el formulario desde donde lo llamo
es el Application:oMainFrom.
METHOD ProgBenzing() CLASS TFormMenu
LOCAL cRuta := Application:CurrentDir() + "Benzing"
*
** Abrir la base de LlegadasTest y hacer un Zap de todos los registros
WITH OBJECT ::oDbfLlegadasTest
:lShared := .F.
:lOpen := .T.
IF :lOpen
IF :RecCount() > 0
:Zap()
ENDIF
ENDIF
:Close()
END
*
** Para ejecutar el programa debe de estar conectado
** el clubPoint o RelojClub
IF MsgYesNo("Para poder trabajar con el programa debes de tener" +
CHR(13) +;
"conectado el ClubPoint ó RelojClub, cuando lo tengas"
+CHR(13)+;
"conectado Pulsa SI para continuar y No para cancelar"
+CHR(13)+;
CHR(13) + " ¿Deseas Continuar y ejecutar el programa?", ;
AppData:gCaption)
** Ejecutar el programa externo del Reloj Benzing
Execute( cRuta + "Palomartorio.exe",, .T.)
*
ENDIF
RETURN Nil
José Ramón Castro.
Efecto no desea del comado Execute
José Ramón,
> No es eso lo que me ocurre lo que ocurre es que la mover el formulario del
> proceso hijo por la pantalla del proceso padre deja una estela que en el
> dibujo que te muestro es la mancha blanca que se ve. ¿Me has entendido?,
Creo que sí te he entendido, y es precísamente eso lo que ocurre.
> ** Ejecutar el programa externo del Reloj Benzing
> Execute( cRuta + "Palomartorio.exe",, .T.)
En la llamada a Execute, el tercer parámetro lo pones a .T., lo que
significa que el programa se queda completamente congelado hasta que termina
el proceso hijo. Al quedarse congelado ni siquiera llega a pintarse cuando
hace falta, e incluso windows xp te dará mensajes de "el programa no
responde".
Ponerlo a .T. es útil cuando ejecutas un programa pequeño que tarde poco
tiempo y vuelve enseguida, y que además necesitas sincronizarlo, es decir,
que tú no continúas ejecutando código hasta que ese programa haya terminado,
bien porque necesites algún resultado de él o por alguna otra razón.
Pero en el resto de los casos, no conviene dejar el programa congelado. Si
realmente necesitas saber cuando se cierra el proceso hijo tendrás que
controlar tú la ejecución. P.ej:
hProcess := Execute( cRuta + "Palomartorio.exe",, .T.)
WHILE IsRunnig( hProcess )
ProcessMessages()
ENDDO
Con este ejemplo, el programa puede repintarse y responder a los mensajes de
windows. Pero también tiene el inconveniente de que el usuario puede
interactuar con él. Si no quieres que el usuario pueda hacer nada en tu
programa podrías, p.ej., desactivar los formularios que estuvieran activos
en ese momento (:lEnabled := .F.) y volver a activarlos al final.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
> No es eso lo que me ocurre lo que ocurre es que la mover el formulario del
> proceso hijo por la pantalla del proceso padre deja una estela que en el
> dibujo que te muestro es la mancha blanca que se ve. ¿Me has entendido?,
Creo que sí te he entendido, y es precísamente eso lo que ocurre.
> ** Ejecutar el programa externo del Reloj Benzing
> Execute( cRuta + "Palomartorio.exe",, .T.)
En la llamada a Execute, el tercer parámetro lo pones a .T., lo que
significa que el programa se queda completamente congelado hasta que termina
el proceso hijo. Al quedarse congelado ni siquiera llega a pintarse cuando
hace falta, e incluso windows xp te dará mensajes de "el programa no
responde".
Ponerlo a .T. es útil cuando ejecutas un programa pequeño que tarde poco
tiempo y vuelve enseguida, y que además necesitas sincronizarlo, es decir,
que tú no continúas ejecutando código hasta que ese programa haya terminado,
bien porque necesites algún resultado de él o por alguna otra razón.
Pero en el resto de los casos, no conviene dejar el programa congelado. Si
realmente necesitas saber cuando se cierra el proceso hijo tendrás que
controlar tú la ejecución. P.ej:
hProcess := Execute( cRuta + "Palomartorio.exe",, .T.)
WHILE IsRunnig( hProcess )
ProcessMessages()
ENDDO
Con este ejemplo, el programa puede repintarse y responder a los mensajes de
windows. Pero también tiene el inconveniente de que el usuario puede
interactuar con él. Si no quieres que el usuario pueda hacer nada en tu
programa podrías, p.ej., desactivar los formularios que estuvieran activos
en ese momento (:lEnabled := .F.) y volver a activarlos al final.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Efecto no desea del comado Execute
José Ramón,
perdón. He hecho un copiar/pegar y no es correcto, además de un 'typo'. Lo
correcto es:
hProcess := Execute( cRuta + "Palomartorio.exe" )
WHILE IsRunning( hProcess )
ProcessMessages()
ENDDO
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
perdón. He hecho un copiar/pegar y no es correcto, además de un 'typo'. Lo
correcto es:
hProcess := Execute( cRuta + "Palomartorio.exe" )
WHILE IsRunning( hProcess )
ProcessMessages()
ENDDO
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info