Page 1 of 1
¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Mon May 17, 2010 4:42 pm
by Leon Valenzuela
¿Puedo incluir una rutina VB en una fuente xHarbour?
Tengo problemas para programar con una ocx que no se como abrir...
Ayuda please...
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Mon May 17, 2010 5:02 pm
by Daniel Garcia-Gil
Leon
saludos, enviame el ocx a mi correo a ver que puedo ayudar, o puedes comunicarte conmigo por chat gmail:
danielgarciagil@gmail.com o msn:
danielgarciagil@cantv.net
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Mon May 17, 2010 10:26 pm
by Leon Valenzuela
Daniel, gracias por responder, he puesto un mail para ti.
De antemano, gracias.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 11:37 am
by Daniel Garcia-Gil
Leon...
esto es un pequeño ejemplo con el ocx que me enviaste, espero te sirva de punto de partida
Code: Select all
#include "FiveWin.ch"
//TxBaundRate
#define TXBR1200 0
#define TXBR2400 1
#define TXBR4800 2
#define TXBR9600 3
#define TXBR19200 4
#define TXBR38400 5
//TxCommPort
#define TXCOM1 0
#define TXCOM2 1
#define TXCOM3 2
#define TXCOM4 3
//TxErrorType
#define EFP_Success 0
#define EFP_E_ComInUse 1
#define EFP_E_InvalidCom 2
#define EFP_E_ComAlreadyOpen 3
#define EFP_E_ComAlreadyClose 4
#define EFP_E_BadInitialization 5
#define EFP_E_ComClose 6
#define EFP_E_MaxDataLengthReached 7
#define EFP_E_InvalidDataInField 8
#define EFP_E_OperationInProgress 9
#define EFP_E_WriteError 10
#define EFP_E_ReadTimeOut 11
#define EFP_E_NackReceived 12
#define EFP_E_InvalidIndex 13
//TxFiscalState
#define EFP_S_Close 0
#define EFP_S_Idle 1
#define EFP_S_Busy 2
//TxProtocolType
#define protocol_Compatible 0
#define protocol_Extended 1
function Main()
local oWnd, oEpson
DEFINE WINDOW oWnd TITLE "Epson Activex"
oEpson = TEpsonFPHostControl():New( oWnd ) //TActiveX():New( oWnd, "EpsonFPHostControlX.EpsonFPHostControl" )//
oEpson:bOnOpen = {|| Msginfo( "Port Opened" ) }
oEpson:bOnClose = {|| Msginfo( "Port Closed" ) }
oEpson:bOnError = {|| MsgInfo( oEpson:LastError ) }
oEpson:OpenPort()
? "BaudRate ANTES", oEpson:BaudRate
oEpson:BaudRate = TXBR19200
? "BaudRate DESPUES", oEpson:BaudRate
? "CommPort", oEpson:CommPort
? "ExtraFieldsCount", oEpson:ExtraFieldsCount
? "FiscalStatus", oEpson:FiscalStatus
? "LastError", oEpson:LastError
? "PrinterStatus", oEpson:PrinterStatus
? "ProtocolType", oEpson:ProtocolType
? "ReturnCode", oEpson:ReturnCode
? "State", oEpson:State
oEpson:ClosePort()
ACTIVATE WINDOW oWnd
return nil
CLASS TEpsonFPHostControl FROM TActiveX
DATA oActiveX
DATA oWnd
DATA bOnOpen
DATA bOnAck
DATA bOnClose
DATA bOnError
DATA bOnFinalAnswer
DATA bOnIntermediateAnswer
DATA bOnNack
DATA bOnRead
DATA bOnWrite
METHOD New( oWnd )
METHOD HandleEpsonEvent( event, aParams, pParams )
ENDCLASS
METHOD New( oWnd ) CLASS TEpsonFPHostControl
::oWnd = oWnd
Super:New( oWnd, "EpsonFPHostControlX.EpsonFPHostControl" )
::bOnEvent = { | event, aParams, pParams | ::HandleEpsonEvent( event, aParams, pParams ) }
RETURN Self
//-------
METHOD HandleEpsonEvent( event, aParams, pParams ) CLASS TEpsonFPHostControl
LOCAL cEvent := UPPER( event )
SWITCH cEvent
CASE "ONOPEN"
IF ::bOnOpen != NIL .AND. ValType( ::bOnOpen ) == "B"
Eval( ::bOnOpen, aParams )
ENDIF
EXIT
CASE "ONACK"
IF ::bOnAck != NIL .AND. ValType( ::bOnAck ) == "B"
Eval( ::bOnAck, aParams )
ENDIF
EXIT
CASE "ONCLOSE"
IF ::bOnClose != NIL .AND. ValType( ::bOnClose ) == "B"
Eval( ::bOnClose, aParams )
ENDIF
EXIT
CASE "ONERROR"
IF ::bOnError != NIL .AND. ValType( ::bOnError ) == "B"
Eval( ::bOnError, aParams )
ENDIF
EXIT
CASE "ONFINALANSWER"
IF ::bOnFinalAnswer != NIL .AND. ValType( ::bOnFinalAnswer ) == "B"
Eval( ::bOnFinalAnswer, aParams )
ENDIF
EXIT
CASE "ONINTERMEDIATEANSWER"
IF ::bOnIntermediateAnswer != NIL .AND. ValType( ::bOnIntermediateAnswer ) == "B"
Eval( ::bOnIntermediateAnswer, aParams )
ENDIF
EXIT
CASE "ONNACK"
IF ::bOnNack != NIL .AND. ValType( ::bOnNack ) == "B"
Eval( ::bOnNack, aParams )
ENDIF
EXIT
CASE "ONREAD"
IF ::bOnRead != NIL .AND. ValType( ::bOnRead ) == "B"
Eval( ::bOnRead, aParams )
ENDIF
EXIT
CASE "ONWRITE"
IF ::bOnWrite != NIL .AND. ValType( ::bOnWrite ) == "B"
Eval( ::bOnWrite(), aParams )
ENDIF
EXIT
ENDSWITCH
RETURN NIL
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 3:29 pm
by Leon Valenzuela
Daniel, muchas gracias por lo gráfico de tu ejemplo, lo he copiado tal cual en una prg llamada EpsonOCX.prg, y al compilarla con FiveWin 9.08 y xHarbour, me arroja los siguientes errores:
Code: Select all
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406)
Copyright 1999-2009, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'epsonocx.prg' and generating preprocessed output to 'epsonocx.ppo'...
epsonocx.prg(109) Error E0059 Invalid SWITCH Constant 'ONOPEN'.
epsonocx.prg(114) Error E0059 Invalid SWITCH Constant 'ONACK'.
epsonocx.prg(119) Error E0059 Invalid SWITCH Constant 'ONCLOSE'.
epsonocx.prg(124) Error E0059 Invalid SWITCH Constant 'ONERROR'.
epsonocx.prg(129) Error E0059 Invalid SWITCH Constant 'ONFINALANSWER'.
epsonocx.prg(134) Error E0059 Invalid SWITCH Constant 'ONINTERMEDIATEANSWER'.
epsonocx.prg(139) Error E0059 Invalid SWITCH Constant 'ONNACK'.
epsonocx.prg(144) Error E0059 Invalid SWITCH Constant 'ONREAD'.
epsonocx.prg(149) Error E0059 Invalid SWITCH Constant 'ONWRITE'.
9 errors
No code generated
Agradecería una orientación, puesto que los bucles SWITCH no los manejo, de antemano, gracias.
Un abrazo, Leo.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 3:44 pm
by Daniel Garcia-Gil
Leon
Cambia el SWITCH por DO CASE
ejemplo
Code: Select all
DO CASE
CASE cEvent == "ONOPEN"
...
CASE cEvent == "ONCLOSE"
...
ENDCASE
elimina los EXIT
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 4:05 pm
by Leon Valenzuela
Daniel, gracias otra vez, por intuición lo hice, y funcionó, ahora, la pregunta es, ¿cómo uso la función "AddDataField" de la ocx? tengo que definirla?
Un abrazo, Leo.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 5:01 pm
by Lautaro
Hola,
Disculpen que me intrometa, pero si no me equivoco deberias llamarlo asi :
Code: Select all
...
oEpson:AddDataField(....) //<-- No olvidar poner los parametros correctos
...
...
Saludos,
Lautaro Moreira
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 5:15 pm
by Leon Valenzuela
Daniel, tu class ha sido muy valiosa para mi desarrollo, y estoy seguro que será de mucha utilidad para varios en el foro. Te cuento, incluí éstas líneas de código, y supongo que por la respuesta están bien...
Code: Select all
? "Añadiendo venta", oEpson:AddDataField("hola")
? "Añadiendo venta", oEpson:AddDataField("Holanda")
A ambas la respuesta es .T., intuyo que ha añadido la venta a la memoria fiscal de impresora.
Saludos, Leo.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 5:16 pm
by Leon Valenzuela
Lautaro, muchas gracias por tu aporte... creo que la cosa funcionará...
al menos, eso espero...
Un abrazo, Leo.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Tue May 18, 2010 10:20 pm
by Leon Valenzuela
Help! Cómo envío las cadenas hexadecimales, como la siguiente línea de comando en visual basic?
Code: Select all
Me.EpsonFPHostControl1.AddDataField Chr$(&H2) & Chr$(&HA)
Me.EpsonFPHostControl1.AddDataField Chr$(&H0) & Chr$(&H1)
De antemano, gracias.
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Sun Aug 15, 2010 3:30 pm
by QAZWSX2K
saludos
amigo leon, pudistes por fin grabar la venta, tengo el mismo problema ahora y quizas me puedas ayudar, como vi tu ultima pregunta sin responder no se si al fin lo pudistes hacer
Re: ¿Puedo incluir una rutina VB en una fuente xHarbour?
Posted: Mon Aug 16, 2010 1:20 pm
by Adolfo
QAZWSX2K, Leon
Haganlo asi...
Ejemplos
//--------------------------------------------
Comando:=Chr(5) + Chr(1)
lRes:=EF:AddDataField(Comando)
Extension:=VtArrayWrapper(VT_UI1,( Chr(0) + Chr(0) + Chr(0) + Chr(0) ) )
lRes:=EF:AddDataField(Extension)
lRes:=SendCommand()
//---------------------------------------------
En el cuerpo de la Boleta, cada linea de productos, hacer esto.
//---------------------------------------------
Comando:=Chr(10) + Chr(6)
lRes:=EF:AddDataField(Comando)
Extension:=VtArrayWrapper(VT_UI1,( Chr(0) + Chr(0) + Chr(1) + Chr(0) ) )
EF:AddDataField(Extension)
EF:AddDataField("")
EF:AddDataField("")
EF:AddDataField("")
EF:AddDataField("")
EF:AddDataField("")
EF:AddDataField( Substr(cProducto,1,30))
EF:AddDataField( nCantidad )
EF:AddDataField( nValorUnidad )
EF:AddDataField( 1900 )
lRes:=SendCommand()
//---------------------------------------------
Cualquier avance o duda, posteenla..
Saludos
Desde Chile
Adolfo