Página 1 de 1

Efecto no desea del comado Execute

Publicado: Sab Ene 27, 2007 9:55 pm
por jrcpoli-quitar
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.
--

Efecto no desea del comado Execute

Publicado: Dom Ene 28, 2007 10:00 pm
por jfgimenez
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

Efecto no desea del comado Execute

Publicado: Lun Ene 29, 2007 1:41 pm
por jrcpoli-quitar
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.

Efecto no desea del comado Execute

Publicado: Lun Ene 29, 2007 2:15 pm
por jfgimenez
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

Efecto no desea del comado Execute

Publicado: Lun Ene 29, 2007 2:18 pm
por jfgimenez
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