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.

Cómo recuperar el foco después de execute ()

Foro de Xailer profesional en español
Responder
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Cómo recuperar el foco después de execute ()

Mensaje por emeasoft »

Por favor:
Cuando uso Execute ( "C: TEF TEF.EXE"), la TEF.EXE se minimiza
en la bandeja del sistema, pero mi aplicación pierde el foco.
¿Cómo devolver el foco a mi aplicación después de Execute()?
Esto no funciona:
Execute ( "C: TEF TEF.EXE")
::oForm:SetFocus()
o:
LOCAL cState:=::oForm:SaveState()
Execute ( "C: TEF TEF.EXE")
::oForm:RestoreState(cState)
o:
Execute ( "C: TEF TEF.EXE")
SetActiveWindow( ::Handle )
Gracias por su ayuda.
Saludos!
Mário Angelini
www.eMeAsOfT.com
http://emeasoft.blogspot.com/
http://twitter.com/emeasoft
NoAccount
Mensajes: 35
Registrado: Mié Sep 16, 2009 10:09 am

Cómo recuperar el foco después de execute ()

Mensaje por NoAccount »

Mario,
Seguramente sea un problema de 'timing'. Intente realizar un post message
del tipo WM_SETFOCUS sobre el form principal. Si ello no funciona deberá
utilizar posiblemente un timer que lo único que haga sea reestablecer el
foco y luego destruirse.
Un saludo
--
Ignacio Ortiz de Zúñiga
Xailer team
http://www.xailer.com
http://www.xailer.info
"Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
news:4bb353ae$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Por favor:
>
> Cuando uso Execute ( "C: TEF TEF.EXE"), la TEF.EXE se minimiza
> en la bandeja del sistema, pero mi aplicación pierde el foco.
> ¿Cómo devolver el foco a mi aplicación después de Execute()?
>
> Esto no funciona:
>
> Execute ( "C: TEF TEF.EXE")
> ::oForm:SetFocus()
>
> o:
>
> LOCAL cState:=::oForm:SaveState()
> Execute ( "C: TEF TEF.EXE")
> ::oForm:RestoreState(cState)
>
>
> o:
> Execute ( "C: TEF TEF.EXE")
> SetActiveWindow( ::Handle )
>
> Gracias por su ayuda.
>
> Saludos!
> Mário Angelini
> www.eMeAsOfT.com
> http://emeasoft.blogspot.com/
> http://twitter.com/emeasoft
>
>
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Cómo recuperar el foco después de execute ()

Mensaje por emeasoft »

Ignacio:
Yo no entendí­ como hacer esto.
¿Podria explicarme mejor?
Hice la prueba:
MsgInfo(1)
Execute ( "C: TEF TEF.EXE")
MsgInfo(2) <-pierde el foco
Mário
NoAccount
Mensajes: 35
Registrado: Mié Sep 16, 2009 10:09 am

Cómo recuperar el foco después de execute ()

Mensaje por NoAccount »

Mario,
oMyForm:PostMsg( WM_SETFOCUS )
O
WITH OBJECT TTimer():New( oMyForm )
:nInterval := 1000
:OnTimer := {|oSender| oMyForm:SetFocus(), oSender:End() }
:lEnabled := .T.
:Create()
:Enabled()
END WITH
Regards,
--
Ignacio Ortiz de Zúñiga
Xailer team
http://www.xailer.com
http://www.xailer.info
"Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
news:4bb4a34f$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ignacio:
> Yo no entendí como hacer esto.
> ¿Podria explicarme mejor?
>
> Hice la prueba:
>
> MsgInfo(1)
> Execute ( "C: TEF TEF.EXE")
> MsgInfo(2) <-pierde el foco
>
> Mário
NoAccount
Mensajes: 35
Registrado: Mié Sep 16, 2009 10:09 am

Cómo recuperar el foco después de execute ()

Mensaje por NoAccount »

Sobra el último Enabled()
Saludos
--
Ignacio Ortiz de Zúñiga
Xailer team
http://www.xailer.com
http://www.xailer.info
"Ignacio Ortiz de Zúñiga" <NoAccount@xailer.com> escribió en el mensaje
news:[email=4bb4baac@svctag-j7w3v3j....]4bb4baac@svctag-j7w3v3j....[/email]
> Mario,
>
> oMyForm:PostMsg( WM_SETFOCUS )
>
> O
>
> WITH OBJECT TTimer():New( oMyForm )
> :nInterval := 1000
> :OnTimer := {|oSender| oMyForm:SetFocus(), oSender:End() }
> :lEnabled := .T.
> :Create()
> :Enabled()
> END WITH
>
> Regards,
>
> --
> Ignacio Ortiz de Zúñiga
> Xailer team
> http://www.xailer.com
> http://www.xailer.info
>
> "Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
> news:4bb4a34f$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Ignacio:
>> Yo no entendí como hacer esto.
>> ¿Podria explicarme mejor?
>>
>> Hice la prueba:
>>
>> MsgInfo(1)
>> Execute ( "C: TEF TEF.EXE")
>> MsgInfo(2) <-pierde el foco
>>
>> Mário
>
>
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Cómo recuperar el foco después de execute ()

Mensaje por emeasoft »

Ignacio:
Nada de lo que usted sugirió trabajado.
He encontrado la siguiente solución:
Application:lBusy:=.T.
Execute ( "C: TEF TEF.EXE")
Application:lBusy:=.F.
::oForm:SetFocus()
Descubrí­ después de numerosos intentos de otros por casualidad.
No puedo explicar por qué funciona así­.
Mário
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Cómo recuperar el foco después de execute ()

Mensaje por ignacio »

Mario,
el Timer deberí­a haber funcionado en cualquier caso. Pero bueno, si ya lo
tiene andando, me alegro.
Un saludo
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer/Xailer team]
http://www.xailer.com
http://www.xailer.info
"Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje de
noticias:4bbdf2c1$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ignacio:
> Nada de lo que usted sugirió trabajado.
> He encontrado la siguiente solución:
>
> Application:lBusy:=.T.
> Execute ( "C: TEF TEF.EXE")
> Application:lBusy:=.F.
> ::oForm:SetFocus()
>
>
> Descubrí­ después de numerosos intentos de otros por casualidad.
> No puedo explicar por qué funciona así­.
>
>
> Mário
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Cómo recuperar el foco después de execute ()

Mensaje por emeasoft »

Boa tarde
A tí­tulo de colaboração, descobrimos, depois de muitas pesquisas e tentativas,
como fazer para recuperar o foco
da aplicação, no caso de usar chamadas para aplicaçíµes externas, muito
usado no Brasil, para aplicaçíµes com TEF discado (pagamento de cartão de
crédito/débito ou consulta de cheque pela internet).
Se o foco não voltar para a aplicação -- faz parte do roteiro pelas bandeiras (Redecard, Visanet, Amex....) -- não é possí­vel homologar o aplicativo.
LOCAL nHandle:=GetForegroundWindow() // http://http://bit.ly/1fnbZJ
... ROTINAS EXTERNAS
SetForegroundWindow(nHandle) // http://bit.ly/1fnbZJ
ou apenas
... ROTINAS EXTERNAS
SetForegroundWindow(::Handle) // http://bit.ly/1fnbZJ
Responder