Hola Jose
Revisa si esto te sirve.
define _DDE_CH
define _FOLDER_CH
define _VIDEO_CH
define _TREE_CH
define _ODBC_CH
include "FiveWin.ch"
include "Tsbrowse.ch"
include "Report.ch"
define FULL_SIZE 405
define HALF_SIZE 260
define IN_BUFFER 500
define TERM_SIZE 300
extern Set,Setfocus, GetTextWidth // Blinker stuff
static nComm, cTerminal, oTerminal,OWND,OBRW,oReport
static cNumber
static oSpeaker, oHangDown, oLocalNum, oNumber
static aPredefined
//----------------------------------------------------------------------------//
function Main()
local oDlg, ofig1
local cLocalNum := "123456789"
local oHand
local lOpened := .f.
----------------------------------------------------------------------------
cNumber = Space( 20 )
SET 3DLOOK ON
LoadPredPhones()
USE teleFono alias telefono NEW SHARED
GO TOP
DEFINE WINDOW oDLG TITLE "Central Telefonica." FROM 5,5 TO 450,320;
COLOR CLR_BLACK,CLR_CEL
oDLG:bCommNotify = { | nComm, nStatus | BytesAtPort( nComm, nStatus ) }
@1,1 BROWSE OBRW ;
ALIAS "TELEFONO";
COLOR CLR_BLACK,CLR_CEL;
SIZE 975,600 ;
ON DBLCLICK ASUMIR(@obrw);
of oDlg
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->FECHA ;
HEAD "Fecha" ;
SIZE 80 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->HORA ;
HEAD "Hora" PICTURE"99:99";
SIZE 60 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->EXTE ;
HEAD "EXT" ;
SIZE 50 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->CUARTO_ID ;
HEAD "HAB" ;
SIZE 50 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->TELE ;
HEAD "TELEFONO" ;
SIZE 120 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->DURACION ;
HEAD "TIEMPO" PICTURE"99.99" ;
SIZE 40 PIXELS
ADD COLUMN TO BROWSE oBrw DATA TELEFONO->LUGAR ;
HEAD "DESTINO" ;
SIZE 130 PIXELS
oBrw:nHeightCell += 5
oBrw:nHeightHead += 4
oBrw:nLineStyle := 4
ACTIVATE WINDOW oDlg ;
ON INIT ( odlg:maximize(), ;
If( ! lInitModem(), oDlg:End(),),;
EnableCommNotification( nComm, oDlg:hWnd, IN_BUFFER, IN_BUFFER ) );
VALID ( CloseComm( nComm ), .t. )
return nil
//----------------------------------------------------------------------------//
function lInitModem()
local cDcb, nError, nBytes
nComm = OpenComm( "COM1", 1024, 128 )
if ! BuildCommDcb( "COM1:19200,n,8,1", @cDcb )
nError = GetCommError( nComm )
MsgStop( "Error initializing modem!" )
return .f.
endif
if ! SetCommState( cDcb )
nError = GetCommError( nComm )
MsgStop( "Error initializing modem!" )
return .f.
endif
if ( nBytes := WriteComm( nComm, "ATZ0" + Chr( 13 ) ) ) < 0
nError = GetCommError( nComm )
MsgStop( "Error initializing modem!" )
return .f.
endif
return .t.
//----------------------------------------------------------------------------//
function DialNumber( cNumber )
local nBytes := WriteComm( nComm, AllTrim( cNumber ) + Chr( 13 ) )
if nBytes < 0
MsgStop( "Modem error: " + Str( GetCommError( nComm ) ) )
endif
return nil
//----------------------------------------------------------------------------//
function SendModem( cMsg )
local nBytes := WriteComm( nComm, cMsg )
if nBytes < 0
MsgStop( "Modem error: " + Str( GetCommError( nComm ) ) )
endif
return nil
//----------------------------------------------------------------------------//
function HangUp( lOpen )
oSpeaker:Hide()
oHangDown:Show()
oLocalNum:Show()
SendModem( "ATDT" + If( lOpen, Chr( 13 ), " " ) )
SysRefresh()
return nil
//----------------------------------------------------------------------------//
function HangDown()
SendModem( "ATH" + Chr( 13 ) )
oHangDown:Hide()
oLocalNum:Hide()
oSpeaker:Show()
return nil
//----------------------------------------------------------------------------//
function LoadPredPhones()
local oIni
aPredefined = Array( 8 )
INI oIni FILENAME ".\phone.ini"
GET aPredefined[ 1 ] SECTION "Predefined" ENTRY "1" OF oIni DEFAULT ""
GET aPredefined[ 2 ] SECTION "Predefined" ENTRY "2" OF oIni DEFAULT ""
GET aPredefined[ 3 ] SECTION "Predefined" ENTRY "3" OF oIni DEFAULT ""
GET aPredefined[ 4 ] SECTION "Predefined" ENTRY "4" OF oIni DEFAULT ""
GET aPredefined[ 5 ] SECTION "Predefined" ENTRY "5" OF oIni DEFAULT ""
GET aPredefined[ 6 ] SECTION "Predefined" ENTRY "6" OF oIni DEFAULT ""
GET aPredefined[ 7 ] SECTION "Predefined" ENTRY "7" OF oIni DEFAULT ""
GET aPredefined[ 8 ] SECTION "Predefined" ENTRY "8" OF oIni DEFAULT ""
ENDINI
return nil
//----------------------------------------------------------------------------//
function Predefined( nOrder )
if ! Empty( aPredefined[ nOrder ] )
cNumber = PadR( aPredefined[ nOrder ], 20 )
oNumber:Refresh()
HangUp( .f. )
DialNumber( aPredefined[ nOrder ] )
endif
return nil
//----------------------------------------------------------------------------//
function BytesAtPort( nComm, nStatus )
LOCAL M:=SPACE(80)
local cBuffer := Space( IN_BUFFER )
DEFAULT cTerminal := Space( TERM_SIZE )
ReadComm( nComm, @cBuffer )
*cTerminal = PadR( AllTrim( cTerminal ) + AllTrim( cBuffer ) + CRLF,TERM_SIZE )
cTerminal = AllTrim( cBuffer )
Saludos
erick almanza