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.

Poner mi formulario encima de todas las otras aplicacionen?

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por Carlos Ortiz »

necesito que al ejecutarse una parte de mi aplicación (que esta esperando un
dato desde el modem y mostrar el numero del que llama), se ponga encima de
cualquier otra ventana o aplicación que haya en el escritorio.
en principio el programa cumple la función de identificador de llamadas.
muchas gracias y saludos coordiales
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por jfgimenez »

Carlos,
> necesito que al ejecutarse una parte de mi aplicación (que esta esperando
> un dato desde el modem y mostrar el numero del que llama), se ponga encima
> de cualquier otra ventana o aplicación que haya en el escritorio.
Utiliza el estilo bsSPLASH para esa ventana.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por Carlos Ortiz »

Gracias José, lo pruebo.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=49194c90@ozsrv2.ozlan.local...]49194c90@ozsrv2.ozlan.local...[/email]
> Carlos,
>
>> necesito que al ejecutarse una parte de mi aplicación (que esta esperando
>> un dato desde el modem y mostrar el numero del que llama), se ponga
>> encima de cualquier otra ventana o aplicación que haya en el escritorio.
>
> Utiliza el estilo bsSPLASH para esa ventana.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
PILO
Mensajes: 583
Registrado: Vie Jul 06, 2007 5:18 pm

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por PILO »

Hola Carlos, me puedes poner un ejemplo de como atacas al moden para mandar
y recibir
datos.
Gracias si es posible
"Carlos Ortiz" <cortizassist@hotmail.com> escribió en el mensaje
news:[email=491a3e48@ozsrv2.ozlan.local...]491a3e48@ozsrv2.ozlan.local...[/email]
> Gracias José, lo pruebo.
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:[email=49194c90@ozsrv2.ozlan.local...]49194c90@ozsrv2.ozlan.local...[/email]
>> Carlos,
>>
>>> necesito que al ejecutarse una parte de mi aplicación (que esta
>>> esperando un dato desde el modem y mostrar el numero del que llama), se
>>> ponga encima de cualquier otra ventana o aplicación que haya en el
>>> escritorio.
>>
>> Utiliza el estilo bsSPLASH para esa ventana.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>>
>
>
Elias
Mensajes: 15
Registrado: Sab Jun 21, 2008 11:12 pm

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por Elias »

A mi tambien me interesa...
Gracias de antemano.
"PILO" <srmpilo@hotmail.com> wrote:
>Hola Carlos, me puedes poner un ejemplo de como atacas al moden para mandar
>y recibir
>datos.
>Gracias si es posible
>
>"Carlos Ortiz" <cortizassist@hotmail.com> escribió en el mensaje
>news:[email=491a3e48@ozsrv2.ozlan.local...]491a3e48@ozsrv2.ozlan.local...[/email]
>> Gracias José, lo pruebo.
>>
>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
>> news:[email=49194c90@ozsrv2.ozlan.local...]49194c90@ozsrv2.ozlan.local...[/email]
>>> Carlos,
>>>
>>>> necesito que al ejecutarse una parte de mi aplicación (que esta
>>>> esperando un dato desde el modem y mostrar el numero del que llama),
se
>>>> ponga encima de cualquier otra ventana o aplicación que haya en el
>>>> escritorio.
>>>
>>> Utiliza el estilo bsSPLASH para esa ventana.
>>>
>>> --
>>> Un saludo,
>>>
>>> José F. Giménez
>>> http://www.xailer.com
>>> http://www.xailer.info
>>>
>>
>>
>
>
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Poner mi formulario encima de todas las otras aplicacionen?

Mensaje por Carlos Ortiz »

He tomado lo mas relevante sobre el reconocimiento del numero telefonico ya que la aplicacion gestiona otras cosas tambien. He ido marcando en rojo lo mas importante a mi criterio.
Esto usa algo que aporto un colega (creo que José Lalin) me tiro una lib, HBCOMM que anda en el foro dano vueltas.
Espero sirva esta contribución y estamos en contacto..
/*
* Proyecto: CID
* Fichero: Form1.prg
* Descripción:
* Autor:
* Fecha: 05/06/2007
*/
#include "Xailer.ch"
CLASS TForm1 FROM TForm
DATA nHandle INIT 256 //A numeric >= 256. If nHandle is negative, the open failed.
DATA cPort INIT "COM1" //COMn desde el n:= 1 al n:= 4
DATA nBaudrate INIT 9600 //nBaudrate Just like you're used to (e.g., 2400, 4800, 9600, etc. )
DATA nDatabits INIT 8 //nDatabits Usually 8, but can be 7 or 4.
DATA nParity INIT 0 //nParity coded: 0,1,2,3 -> none, odd, mark, even
DATA nStopbits INIT 0 //nStopbits coded: 0,1,2 -> 1, 1.5, 2
DATA nBuffersize INIT 8000 //nBuffersize I'm using 8000 at 38,400 baud.
DATA lEstado INIT .T.
DATA cID INIT ""
DATA lVisible INIT .T.
DATA lShow INIT .F.
COMPONENT oNotifyIcon1
COMPONENT oPopupMenu1
COMPONENT oCdxData
COMPONENT oDSConfig
COMPONENT oDSTablas
COMPONENT oMemo1
COMPONENT oDSTelefonos
COMPONENT oDbf
COMPONENT oDSPersonas_Telefonos
COMPONENT oDSPersonas
COMPONENT oButton1
COMPONENT oLabel1
COMPONENT oMemo2
METHOD CreateForm()
METHOD FormSize( oSender, nSizeType, nClientWidth, nClientHeight )
METHOD PopupMenu1Item1Click( oSender, oMenu )
METHOD PopupMenu1Item2Click( oSender, oMenu )
METHOD DoProcesar()
METHOD AbroPuerto( oSender )
METHOD CerrarPuerto( oSender )
//METHOD Llamadas_Recibidas( oSender )
METHOD AgregoLlamada_Recibida( oSender )
METHOD FormInitialize( oSender )
METHOD FormClose( oSender, @lClose )
METHOD FormShow( oSender )
METHOD Button1Click( oSender )
METHOD NotifyIcon1DblClick( oSender, nX, nY )
ENDCLASS
#include "Form1.xfm"
//---------------------------------------------------------- --------------------
METHOD FormSize( oSender, nSizeType, nClientWidth, nClientHeight ) CLASS TForm1
//::lVisible := !::oNotifyIcon1:lVisible := ( nSizeType == 1 )
// lo desactivo por que se cuelga en Win2000
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD PopupMenu1Item1Click( oSender, oMenu ) CLASS TForm1
//::Show()
::Restore()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD PopupMenu1Item2Click( oSender, oMenu ) CLASS TForm1
::Restore()
::Close()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TForm1
REQUEST HB_LANG_ES // para mensajes
HB_LANGSELECT( "ES" )
REQUEST HB_CODEPAGE_ESMWIN // para ordenación de indices
HB_SetCodePage( "ESMWIN" )
Application:lUseReturn := .t.
// Esto tiene config.ini
// [Modem]
// cPort="COM3"
// nBaudrate=9600
// nParity=0
// nDataBits=8
// nStopbits=0
// [Comandos]
// cID="AT+VCID=1"
WITH OBJECT TIni():New( ".Config.ini" )
// Configuración inicial del modem
::cPort := :GetEntry("Modem","cPort")
::nBaudrate := val(:GetEntry("Modem","nBaudrate"))
::nParity := val(:GetEntry("Modem","nParity"))
::nDataBits := val(:GetEntry("Modem","nDataBits"))
::nStopbits := val(:GetEntry("Modem","nStopbits"))
::cID := :GetEntry("Comandos","cID")
END
AppData:AddData("nIDTipLlam",leoconfig("config","NIDTIPLLAM "))
AppData:AddData("nIDEstLlam",leoconfig("config","NIDESTLLAM "))
//::nShowMode:=2
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD FormClose( oSender, lClose ) CLASS TForm1
lClose := .F.
*
** Si el puerto no está cerrado
IF IsWorking( ::nHandle )
::CerrarPuerto()
ENDIF
*
*
lClose := .T.
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD AbroPuerto( oSender ) CLASS TForm1
local nCanLineas, nleo, cVariable, dFecha, cHora, lRing:=.f., nSegInicio, nSegActual
::nHandle := Init_Port( ::cPort, ::nBaudrate, ::nDataBits, ::nParity, ::nStopbits, ::nBuffersize )
OutBufClr( ::nHandle ) // Vacia el Buffer
IF IsWorking( ::nHandle ) // Si puerto abierto
SETHANDSHAKE(::nHandle,0)
::lEstado := .T.
** Prueba de leer y escribir en el puerto
//OutChr( ::nHandle, "ATZ" ) // --> lSuccess
//OutChr( ::nHandle, "AT#CID=1"+CRLF,1 ) // --> lSuccess
// "AT+VCID=1 // este anduvo para mi modem
IF !empty(alltrim(::cID))
// Aca se intenta habilitar el CID del modem
OutChr( ::nHandle, ::cID+CRLF,1 ) // --> lSuccess
ENDIF
::oMemo1:Value := ""
DO WHILE ::lEstado
ProcessMessages()
IF !::lEstado
EXIT
ENDIF
Sleep(1)
// Esto levanta lo que ingreso por el modem
::DoProcesar()
// Esto suele depender de las empresas de telefonia
IF "RING"$alltrim(upper(::oMemo1:Value)).and.!lRing
lRing:=.t.
nSegInicio:=val( substr(time(),4,2)+substr(time(),7,2) )
ENDIF
IF "DATE"$alltrim(upper(::oMemo1:Value))
nCanLineas:=mlcount(::oMemo1:Value)
// Leo todas las lineas para tomar la fecha y la hora
FOR nleo = 1 to nCanLineas
cVariable:=upper(memoline(::oMemo1:Value,,nLeo))
IF "DATE"$alltrim(cVariable)
dFecha:=strtran(cVariable,"DATE","")
dFecha:=alltrim(strtran(dFecha,"=",""))
dFecha:=pad(right(dFecha,2)+"-"+pad(dFecha,2)+"-"+str(year(date()),4),10)
ENDIF
IF "TIME"$alltrim(cVariable)
cHora:=strtran(cVariable,"TIME","")
cHora:=alltrim(strtran(cHora,"=",""))
cHora:=pad(left(cHora,2)+":"+right(cHora,2)+":00",8)
ENDIF
NEXT
FOR nleo = 1 to nCanLineas
IF "NMBR"$alltrim(cVariable)
cVariable:=strtran(cVariable,"NMBR","")
cVariable:=alltrim(strtran(cVariable,"=",""))
/*
::oStatusBar1:ShowBalloon( 450,15,"Desde el "+cVariable+CRLF+dFecha+" "+cHora,"Llamada entrante",tiINFO)
Sleep(3000)
::oStatusBar1:HideBalloon()
*/
// Agrego un registro en Llamadas_Recibidas
::AgregoLlamada_Recibida(cVariable, dFecha, cHora)
EXIT
ENDIF
NEXT
ENDIF
nSegActual:=val( substr(time(),4,2)+substr(time(),7,2) )
IF lRing
IF nSegActual-nSegInicio>=4
UnInt_Port( ::nHandle )
::nHandle := Init_Port( ::cPort, ::nBaudrate, ::nDataBits, ::nParity, ::nStopbits, ::nBuffersize )
::oMemo1:Value := ""
OutBufClr( ::nHandle ) // Vacia el Buffer
IF !empty(alltrim(::cID))
OutChr( ::nHandle, ::cID+CRLF,1 ) // --> lSuccess
endif
lRing:=.f.
ENDIF
ENDIF
ENDDO
*
ELSE
MsgInfo("El puerto " + ::cPort + " no se puede abrir")
::oPuerto:SetFocus(.T.)
ENDIF
RETURN NIL
//---------------------------------------------------------- --------------------
METHOD FormShow( oSender ) CLASS TForm1
::AbroPuerto()
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD DoProcesar() CLASS TForm1
LOCAL nChr := InBufSize(::nHandle)
LOCAL cBuff := SPACE( nChr )
local a
IF nChr != InChr( ::nHandle, nChr, @cBuff )
MsgInfo( "La lectura en el puerto ha fallado")
RETURN ::lEstado := .F.
*
ENDIF
IF Len(Alltrim(cBuff)) > 0
*
::oMemo1:Append(cBuff)
::oMemo2:Value:=::oMemo2:Value+::oMemo1:Value+CRLF
*
ENDIF
RETURN ::lEstado
//---------------------------------------------------------- --------------------
METHOD CerrarPuerto( oSender ) CLASS TForm1
UnInt_Port( ::nHandle )
IF !IsWorking( ::nHandle)
::lEstado := .F.
ELSE
MsgInfo("El puerto " + ::cPort + " no se puede cerrar")
ENDIF
*
RETURN ::lEstado
//---------------------------------------------------------- --------------------
METHOD AgregoLlamada_Recibida( cNumTele, dFecha, cHora ) CLASS TForm1
local ret:=" "
local oForm3
::oDSTelefonos:Select()
::oDSTelefonos:OrdSetFocus(2)
// Busco si existe el teléfono en la tabla
IF !::oDSTelefonos:Seek(alltrim(cNumTele))
::oDSTelefonos:AddNew()
::oDSTelefonos:nidTele:=LockCfg("NIDTELE")
::oDSTelefonos:cNumTele:=cNumTele
inccfg("NIDTELE")
::oDSTelefonos:Update()
ENDIF
::oDSTelefonos:Select()
::oDSTelefonos:OrdSetFocus(1)
// Registro la llamada
::oDbf:Select()
::oDbf:AddNew()
IF empty(::oDbf:nidLlam)
::oDbf:nIDTipLlam := leoconfig("config","NIDTIPLLAM")
::oDbf:nIDEstLlam := leoconfig("config","NIDESTLLAM")
::oDbf:nidLlam := LockCfg("NIDLLAM")
::oDbf:nidTele := ::oDSTelefonos:nidTele
::oDbf:nIDPersona := busODS(::oDSPersonas_Telefonos,"nIDPersona",0,str(::oDSTelefonos:nidTele),2)
::oDbf:dFecLlam := date()
::oDbf:cHorLlam := time()
::oDbf:cLeida := "N"
IF ::oDbf:nidLlam=0
RETURN ret
ENDIF
inccfg("NIDLLAM")
::oDbf:Select()
::oDbf:Update()
ret := busODS(::oDSPersonas,"alltrim(cNombre)","«No Asignado»",str(::oDbf:nIDPersona),1)
// Muestro un Splash (según recomendación de José) )de los datos de quien llama
WITH OBJECT oForm3 := TForm3():New( Application )
:cargo:= "( "+cNumTele+" )"
:cText := ret
:ShowModal()
END WITH
ELSE
::oDbf:Cancel()
ENDIF
::oDbf:Select()
RETURN ret
//---------------------------------------------------------- --------------------
METHOD Button1Click( oSender ) CLASS TForm1
LOCAL oForm3
WITH OBJECT oForm3 := TForm3():New( Application )
:cargo:="(1234567)"
:cText := "PEREZ JOSE"
:Show()
END WITH
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD NotifyIcon1DblClick( oSender, nX, nY ) CLASS TForm1
::PopupMenu1Item1Click( oSender )
RETURN Nil
//---------------------------------------------------------- --------------------
--
Responder