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