Clase para manejo de blat.exe desde FiveWin. V1.1

Clase para manejo de blat.exe desde FiveWin. V1.1

Postby FiveWiDi » Wed Oct 25, 2006 12:16 pm

Hola a todos,

Link para bajar la clase:

http://hyperupload.com/download/0285db1 ... t.prg.html

Saludos
Carlos G.
FiveWiDi
 
Posts: 1058
Joined: Mon Oct 10, 2005 2:38 pm

Postby jose_murugosa » Wed Oct 25, 2006 5:14 pm

Amigo el link baja un archivo de 0 bytes. :shock:
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1144
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Clase para manejar Blat.exe ....

Postby FiveWiDi » Wed Oct 25, 2006 8:58 pm

jose_murugosa wrote:Amigo el link baja un archivo de 0 bytes. :shock:


Perdona, no me había dado cuenta.
Parece ser que no puedo subir nada a HyperUpLoad.

¿Vosotros podeis?

Saludos
Carlos G.

Aun así aquí va todo el código de la clase:

********************************************

/* C.Gelabert octubre'06.

02/10/2006 Añadido DelFiles(), SendAgain(lEspera), LaunchBat(lEspera)
Contempla posibilidad de envío esperando resultado.
01/10/2006 Añadido MakeFBody( cMensaje ) y ::cfBodyBlat
23/09/2006 Añadido control de éxito en el envío del email.
DATA 'lSendok' que indica si el envío ha tenido éxito.
DATA 'cFileError' que será de uso interno.
Método 'End()' devuelve .T. o .F. si el envío ha tenido éxito.

16/09/2006 Primera versión de la clase.

-------------------------------------------------------------------------------------------
Esta clase tiene como finalidad lanzar la utilidad Blat.exe para el envío de correos
electrónicos, es de libre distribución y es de agradecer que si alguién la amplía
me envíe la nueva versión.

Algunas de sus características són:
- Utiliza ficheros auxiliares que la propia clase elimina, evitando con ello la limitación
del modo consola (DOS) en la longitud del uso de comandos desde el PROMPT.
- Permite conservar los emails enviados por si fuera necesario reenviarlos.
(::lDeleteTemp := .F. evita el borrado de los ficheros de la clase que se utilizan)
- Esta clase es fácilmente ampliable con el resto de opciones que utiliza Blat.exe.
- Con una sola llamada a la clase se envía un email.
ej.
lExito := Tfblat():New( "Amiservidor.calimero.com", ;
"miemailde@envio.com", ;
"c:\utilidades\Blat\Blat.exe", ;
"c:\temp", ;
{"fivewidi@laleche.com", "mitia@lola.com"}, ;
{"cgelabert@laleche.com", "cogeeldinero@ycorre.com"}, ;
{"ghermano@laleche.com", "control@emails.com"}, ;
"Asuntito prueba mensaje", ;
"el mensajito" ;
):Send():End()


Inconvenientes:
- Si se desea enviar una batería de emails sería conveniente (pero no obligatorio)
realizar un Inkey(1) entre mensajes para evitar que los nombres de los ficheros
coincidan.

*/


#include "Obj2Hb.ch"
#include "Fileio.Ch"

#define HKEY_LOCAL_MACHINE 2147483650 // 0x80000002

//----------------------------------------------------------------------------//

CLASS TfBlat

CLASSDATA lRegistered AS LOGICAL

DATA cVersion AS STRING // Versión de la clase.

DATA lInstall AS LOGICAL // Indicador de si Blat.exe ja ha estado registrado en el sistema.
DATA cServer AS STRING // Servidor de correo para envío. (correo.lapera.com)
DATA cMailsender AS STRING // Mail de envío.
DATA lSendOk AS LOGICAL // Indica si el envío se ha realizado con éxito

DATA cPathBlat AS STRING // Path completo de la ubicación de BLAT.EXE (C:\micarpeta\elblat\blat.exe)
DATA cPathWork AS STRING // Path de trabajo para la creación de ficheros auxiliares. (C:\Temp\)
DATA cFileBat AS STRING // Fichero .BAT que será lanzado para el envío de los mails.
DATA cFileError AS STRING // Fichero .TXT que indicará si se ha realizado el envío con éxito.
DATA cFileOptions AS STRING // Fichero con las opciones de envío. (20080907145815.op [día i hora]))
DATA lDeleteTemp AS LOGICAL // Indicador de borrado de ficheros temporales.

DATA aTo AS ARRAY // Array de los Destinatarios.
DATA cTf AS STRING // Fichero con los Destinatarios. (20080907145815.tf [día i hora]))
DATA aCc AS ARRAY // Array de los Destinatarios de la Copia.
DATA cCf AS STRING // Fichero con los Destinatarios de la Copia. (20080907145815.cf [día i hora]))
DATA aBcc AS ARRAY // Array de los Destinatarios de la Copia Oculta.
DATA cBf AS STRING // Fichero con los Destinatarios de la Copia Oculta. (20080907145815.bf [día i hora]))

DATA cSubject AS STRING // Asunto.
DATA cSf AS STRING // Fichero que contiene el asunto.

DATA cBody AS STRING // Cuerpo del mensaje.
DATA cfBody AS STRING // Fichero del USUARIO que contine el cuerpo del mensaje.
DATA cfBodyBlat AS STRING // Fichero de la CLASE que contine el cuerpo del mensaje.

DATA cSig AS STRING // Fichero que contiene la firma a insertar al final del cuerpo del mensaje.
DATA cPs AS STRING // Fichero que contiene un final para el mensaje (posterior a la firma).

DATA cAttachi AS STRING // Fichero insertado en el mensaje.

DATA aAf AS ARRAY // Array de los ficheros binarios a adjuntar.
DATA cAf AS STRING // Fichero que contiene la lista de ficheros binarios a adjuntar. (20080907145815.fbi [día i hora]))

DATA aAtf AS ARRAY // Array de los ficheros de textos a adjuntar.
DATA cAtf AS STRING // Fichero que contiene la lista de ficheros de texto a adjuntar. (20080907145815.ftx [día i hora]))

DATA cMailFrom AS STRING // No tiene porque coincidir con el mail de envío original, será el mail que utiliza el 'Responder'.
DATA cOrg AS STRING // Nombre de la Organización.
DATA nPriority AS NUMERIC // Prioridad del mensaje. (0=baja, 1=alta).
DATA lAcuserecibo AS LOGICAL // Solicita acuse de recibo a Destinatario.
DATA lToScreen AS LOGICAL // Echo por pantalla.


METHOD New( cservidor, ;
cMaildeenvio, ;
cUbicacionBlat, ;
cPathdeTrabajo, ;
aDestinatario, ;
aCopiaa, ;
aCopiaocultaa, ;
cAsunto, ;
cMensaje ) CONSTRUCTOR

METHOD Server( cServidor ) INLINE If( Empty(cServidor), ::cServer, ::cServer := cServidor )
METHOD MailSender( cMaildeenvio ) INLINE If( Empty(cMaildeenvio), ::cmailsender, ::cmailsender := cMaildeenvio )
METHOD PathBlat( cUbicacionBlat ) INLINE If( Empty(cUbicacionBlat), ::cPathBlat, ::cPathBlat := cUbicacionBlat )
METHOD PathWork( cPathdeTrabajo ) INLINE If( Empty(cPathdeTrabajo), ::cPathWork, ::cPathWork := cPathdeTrabajo )

METHOD Init()
METHOD IsBlatInstall()

METHOD AddTo( cDestinatario ) INLINE If(Empty(cDestinatario), Nil, AADD( ::aTo, cDestinatario ) )
METHOD AddCc( cCopiaa ) INLINE If(Empty(cCopiaa), Nil, AADD( ::aCc, cCopiaa ) )
METHOD AddBCc( cCopiaOcultaa ) INLINE If(Empty(cCopiaOcultaa), Nil, AADD( ::aBcc, cCopiaOcultaa ) )

METHOD Subject( cAsunto ) INLINE If( Empty(cAsunto), ::cSubject, ::cSubject := cAsunto )
METHOD Body( cMensaje ) INLINE If( Empty(cMensaje), ::cBody, ( ::cfBody := "", ::cBody := cMensaje ) )
METHOD FBody( cFileMensaje ) INLINE If( Empty(cFileMensaje), ::cfBody, ( ::cBody := "", ::cfBody := cFileMensaje ) )
METHOD MakeFBody( cMensaje ) INLINE ( MemoWrit( ::cfBodyBlat, cMensaje), ::FBody( ::cfBodyBlat ) )

METHOD FSig( cFileFirma ) INLINE If( Empty(cFileFirma), ::cSig, ::cSig := cFileFirma )
METHOD FPs( cFileEnd ) INLINE If( Empty(cFileEnd), ::cPs, ::cPs := cFileEnd )

METHOD FAttachi( cFileInBody ) INLINE If( Empty(cFileInBody), ::cAttachi, ::cAttachi := cFileInBody )
METHOD FAttach( cFileBin ) INLINE If(Empty(cFileBin), Nil, AADD( ::aAf, cFileBin ) )
METHOD FAttact( cFileTxt ) INLINE If(Empty(cFileTxt), Nil, AADD( ::aAtf, cFileTxt ) )

METHOD MailFrom( cMailRespuesta ) INLINE If( Empty(cMailRespuesta), ::cMailFrom, ::cMailFrom := cMailRespuesta )
METHOD Org( corganizacion ) INLINE If( Empty(cOrganizacion), ::cOrg, ::cOrg := cOrganizacion )
METHOD Priority( nPrioridad ) INLINE If( Empty(nPrioridad), ::nPriority, ::nPriority := nPrioridad )
METHOD Acuserecibo( lAutoRespuesta ) INLINE If( Empty(lAutoRespuesta), ::lAcuserecibo, ::lAcuserecibo := lAutoRespuesta )
METHOD Screen( lApantalla ) INLINE If( Empty(lApantalla), ::lToScreen, ::lToScreen := lApantalla )

METHOD MakeFiles()
METHOD DelFiles()

METHOD Send()
METHOD SendAgain()

METHOD LaunchBat()

METHOD End()

ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( cServidor, ;
cMaildeenvio, ;
cUbicacionBlat, ;
cPathdeTrabajo, ;
aDestinatario, ;
aCopiaa, ;
aCopiaocultaa, ;
cAsunto, ;
cMensaje ) CLASS TfBlat

DEFAULT cServidor := "Servidor.no.especificado"
DEFAULT cMaildeenvio := "Noseespecifico@emailde.envio"
DEFAULT cUbicacionBlat := Curdrive() + ":" + Curdir() + "\Blat"
DEFAULT cPathdeTrabajo := Curdrive() + ":" + Curdir() + "\Blat\Work"
DEFAULT aDestinatario := { "No se especificó destinatario" }
DEFAULT aCopiaa := {}
DEFAULT aCopiaOcultaa := {}
DEFAULT cAsunto := "Email por Blat.exe"
DEFAULT cMensaje := ""

::cVersion := "1.1"

::cServer := cServidor
::cMailsender := cMaildeenvio
::cPathBlat := cUbicacionBlat
::cPathWork := cPathdeTrabajo

::Init()

::aTo := aDestinatario
::aCc := aCopiaa
::aBcc := aCopiaOcultaa

//AEVal( aDestinatario, {|cDestinatario| ::AddTo( cDestinatario ) } )
//AEVal( aCopiaa, {|cCopiaa| ::AddCc( cCopiaa ) } )
//AEVal( aCopiaOcultaa, {|cCopiaocultaa| ::AddBcc( cCopiaOcultaa ) } )

::Subject( '"' + cAsunto + '"' )
::Body( '"' + cMensaje + '"' )

RETURN Self
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
METHOD Init() CLASS TfBlat

Local cDummy1 := "", cDummy2 := "", nContador := 0

If !lIsdir( ::PathWork() )

cDummy1 := StrToken( ::PathWork(), ++nContador, "" )
cDummy2 := StrToken( ::PathWork(), ++nContador, "" )

While AllTrim( cDummy2 ) <> ""
cDummy1 := cDummy1 + "" + cDummy2
lMkDir( cDummy1 )
cDummy2 := StrToken( ::PathWork(), ++nContador, "" )
End

EndIf

::lSendOk := .F.

::aTo := {}
::aCc := {}
::aBcc := {}
::aAf := {}
::aAtf := {}

::cFileBat := ;
::cFileError := ;
::cFileOptions := ;
::cfBodyBlat := ;
::cTf := ::cCf := ;
::cBf := ::cAf := ;
::cAtf := ::PathWork() + DToS( Date() ) + StrTran( Time(), ":" )

::cFileBat := ::cFileBat + ".bat"
::cFileError := ::cFileError + "_Error.Txt"
::cFileOptions := ::cFileOptions + ".op"
::cfBodyBlat := ::cfBodyBlat + ".men"
::cTf := ::cTf + ".tf"
::cCf := ::cCf + ".cf"
::cBf := ::cBf + ".bf"
::cAf := ::cAf + ".fbi"
::cAtf := ::cAtf + ".ftx"

::nPriority := 0
::lAcuserecibo := .F.
::lToScreen := .T.
::lDeleteTemp := .T.

::lInstall := .T.

/* Habilite la siguiente línea si desea que se realice un 'install' del Blat.exe
en caso de que el sistema no tenga guardados los parámetros del Blat.
Para enviar correos, en principio en una configuración estándar no será
necesario.
-------------------------------------------------------------------------- */
//::lInstall := ::IsBlatInstall()

RETURN Nil
//----------------------------------------------------------------------------//
/* ********************************************************
Comprueba si Blat.exe ha estado 'instalado' en el sistema
leyendo Datos de Configuración de Blat en el Registro.
******************************************************** */
METHOD IsBlatInstall() CLASS TfBlat
LOCAL oReg
Local cDummy := ""

oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Public Domain\Blat")

cDummy := PadR(oReg:Get("SMTP server", cDummy),250)

//Traza(1, "AllTrim(cDummy)=", allTrim(cDummy) )

/*
::cDe := PadR(oReg:Get("Sender" , ::cDe) ,250)
::cSMTP := PadR(oReg:Get("SMTP server", ::cSMTP),250)
::nPuerto := PadR(oReg:Get("SMTP Port" , ::nPuerto),4)
::nIntentos := PadR(oReg:Get("Try" , ::nIntentos),2)
::cConexion := PadR(oReg:Get("Conexion" , ::cConexion),250)

::lSeguro := oReg:Get("SECURE server", ::lSeguro)
::cUsuario := PadR(oReg:Get("User name" , ::cUsuario),250)
::cClave := PadR(DeCrypt(oReg:Get("User password",::cClave), "BlAt"),50)
*/

oReg:Close()

RETURN Len(AllTrim( cDummy )) <> 0

/* Método no utilizado y sólo comentado.
*******************************************************
* Graba Datos de Configuraci¢n de Blat en el Registro *
*******************************************************
METHOD GrabaBlat() CLASS TfBlat
LOCAL oReg

oReg := TReg32():New(HKEY_LOCAL_MACHINE,"SOFTWARE\Public Domain\Blat")
oReg:Set("Sender" , AllTrim(::cDe))
oReg:Set("SMTP server" , AllTrim(::cSMTP))
oReg:Set("SMTP Port" , Alltrim(::nPuerto) )
oReg:Set("Conexion" , AllTrim(::cConexion) )
oReg:Set("Try" , Alltrim(::nIntentos) )
oReg:Set("SECURE server", ::lSeguro )
oReg:Set("User name" , AllTrim(::cUsuario) )
oReg:Set("User password", AllTrim(EnCrypt(::cClave, "BlAt")) )

oReg:Close()

RETURN .T.
*/
//----------------------------------------------------------------------------//
METHOD MakeFiles() CLASS TfBlat

Local lResultado := .T.
Local nContador := 0
Local hFile := 0
Local cOpciones := ""

If Len( ::aTo ) > 0
cOpciones := cOpciones + " -tf " + ::cTf
IF ( hFile := FCREATE( ::cTf, FC_NORMAL)) == -1
lResultado := .F.
Else
FWRITE( hFile, ::aTo[1] )
For nContador := 2 To Len( ::aTo )
FWRITE( hFile, "," + ::aTo[nContador] )
EndFor
FCLOSE( hFile )
EndIf
EndIf
If Len( ::aCc ) > 0
cOpciones := cOpciones + " -cf " + ::cCf
IF ( hFile := FCREATE( ::cCf, FC_NORMAL)) == -1
lResultado := .F.
Else
FWRITE( hFile, ::aCc[1] )
For nContador := 2 To Len( ::aCc )
FWRITE( hFile, "," + ::aCc[nContador] )
EndFor
FCLOSE( hFile )
EndIf
EndIf
If Len( ::aBcc ) > 0
cOpciones := cOpciones + " -bf " + ::cBf
IF ( hFile := FCREATE( ::cBf, FC_NORMAL)) == -1
lResultado := .F.
Else
FWRITE( hFile, ::aBcc[1] )
For nContador := 2 To Len( ::aBcc )
FWRITE( hFile, "," + ::aBcc[nContador] )
EndFor
FCLOSE( hFile )
EndIf
EndIf

If Len( ::aAf ) > 0
cOpciones := cOpciones + " -af " + ::cAf
IF ( hFile := FCREATE( ::cAf, FC_NORMAL)) == -1
lResultado := .F.
Else
FWRITE( hFile, ::aAf[1] )
For nContador := 2 To Len( ::aAf )
FWRITE( hFile, "," + ::aAf[nContador] )
EndFor
FCLOSE( hFile )
EndIf
EndIf
If Len( ::aAtf ) > 0
cOpciones := cOpciones + " -atf " + ::cAtf
IF ( hFile := FCREATE( ::cAtf, FC_NORMAL)) == -1
lResultado := .F.
Else
FWRITE( hFile, ::aAtf[1] )
For nContador := 2 To Len( ::aAtf )
FWRITE( hFile, "," + ::aAtf[nContador] )
EndFor
FCLOSE( hFile )
EndIf
EndIf

If !Empty( ::cSubject )
cOpciones := cOpciones + " -subject " + ::cSubject
EndIf
If !Empty( ::cSf )
cOpciones := cOpciones + " -sf " + ::cSf
EndIf

IF ( hFile := FCREATE( ::cFileOptions, FC_NORMAL)) == -1
//traza( 1, "NO Ok ::cFileOptions=", ::cFileOptions, ".-.", LTrim( cOpciones ) )
lResultado := .F.
Else
FWRITE( hFile, LTrim( cOpciones ) )
FCLOSE( hFile )
//traza( 1, "Ok ::cFileOptions=", ::cFileOptions, ".-.", LTrim( cOpciones ) )
EndIf

IF ( hFile := FCREATE( ::cFileBat, FC_NORMAL)) == -1
lResultado := .F.
Else

If !::lInstall

FWRITE( hFile, Chr(13) + Chr(10) + "REM ******************************************************************************" )
FWRITE( hFile, Chr(13) + Chr(10) + "REM Instalación de Blat.exe desde FiveWin mediante la clase TfBlat (versión " + ::cVersion + " )" )
FWRITE( hFile, Chr(13) + Chr(10) + "REM ******************************************************************************" )

FWRITE( hFile, Chr(13) + Chr(10) + ::cPathBlat )
FWRITE( hFile, " -install " + ::cServer + " " + ::cMailsender )
FWRITE( hFile, Chr(13) + Chr(10) + " " )
FWRITE( hFile, Chr(13) + Chr(10) )
EndIf

FWRITE( hFile, Chr(13) + Chr(10) + "REM *************************************************************************************" )
FWRITE( hFile, Chr(13) + Chr(10) + "REM Envío de email usando Blat.exe desde FiveWin mediante la clase TfBlat (versión " + ::cVersion + " )" )
FWRITE( hFile, Chr(13) + Chr(10) + "REM *************************************************************************************" )

FWRITE( hFile, Chr(13) + Chr(10) + ::cPathBlat )

If !Empty( ::cBody )
FWRITE( hFile, " - -body " + ::cBody )
EndIf
If !Empty( ::cfBody )
FWRITE( hFile, " " + ::cfBody )
EndIf
FWRITE( hFile, " -of " + ::cFileOptions )
FWRITE( hFile, " -server " + ::cServer + ;
" -f " + ::cMailsender + ; // " -i paam12paam12@paam12paam12.com " ;
" -priority " + Str(::nPriority,1,0) + ;
If(::lAcuserecibo, " -r", "") + ;
If(::lToScreen, "", " -q" ) )

If !Empty( ::cMailFrom )
FWRITE( hFile, " -mailfrom " + ::cMailFrom )
EndIf


FWRITE( hFile, Chr(13) + Chr(10) + " " )
FWRITE( hFile, Chr(13) + Chr(10) + "If %errorlevel%==0 Goto NoError" )
FWRITE( hFile, Chr(13) + Chr(10) + "Echo Mensaje_no_enviado__Error_%errorlevel% > " + ::cFileError )
FWRITE( hFile, Chr(13) + Chr(10) + ":Noerror" )
FWRITE( hFile, Chr(13) + Chr(10) + " " )

//FWRITE( hFile, Chr(13) + Chr(10) + " " )
//FWRITE( hFile, Chr(13) + Chr(10) + "Pause Pulsa Intro para continuar." )
//FWRITE( hFile, Chr(13) + Chr(10) + " " )

FCLOSE( hFile )

EndIf

Return lResultado
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
METHOD Send( lEspera ) CLASS TfBlat

::LaunchBat( lEspera )

Return Self
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
METHOD SendAgain( lEspera ) CLASS TfBlat

::lSendOk := .F.
::DelFiles()
::MakeFiles()

::LaunchBat( lEspera )

Return Self
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
METHOD LaunchBat( lEspera ) CLASS TfBlat

DEFAULT lEspera := .T.

If .not. File( ::cFileBat )
::MakeFiles()
EndIf

// así funciona ShellExecute( 0, 0, ::cFileBat, 0, 0, 1 )

/*
#define SW_NORMAL 1
#define SW_MAXIMIZE 3
#define SW_MINIMIZE 6
#define SW_RESTORE 9

#define SW_HIDE 0
#define SW_SHOWNA 8
*/

#define SW_HIDE 0

//Traza( 1, ShellExecute( GetWndApp(), 0, ::cFileBat, 0, 0, SW_HIDE ) )

//ShellExecute( GetWndApp(), 0, ::cFileBat, 0, 0, SW_HIDE )

If lEspera
WaitRun( ::cFileBat )
If .not. File( ::cFileError )
::lSendOk := .T.
EndIf
Else
ShellExecute( GetWndApp(), 0, ::cFileBat, 0, 0, SW_HIDE )
EndIf

Return Self
//----------------------------------------------------------------------------//
METHOD DelFiles() CLASS TfBlat

FErase( ::cFileBat ) // fitxer .BAT
FErase( ::cFileError) // fitxer indicador d'error .TXT
FErase( ::cFileOptions ) // fitxer amb les opcions per llençar el Blat.exe
FErase( ::cfBodyBlat ) // fitxer amb el cos del missatge creat automàticament per la clase, NO per l'usuari.
FErase( ::cTf ) // fitxer amb els destinataris del mail
FErase( ::cCf ) // fitxer amb els destinataris de la copia del mail
FErase( ::cBf ) // fitxer amb els destinataris de la copia oculta del mail
FErase( ::cAf ) // fitxer amb els fitxers binaris a adjuntar al mail
FErase( ::cAtf ) // fitxer amb els fitxers plans (tipus TXT) a adjuntar al mail

Return Nil
//----------------------------------------------------------------------------//
METHOD End() CLASS TfBlat
Local lEnviocorrecto

lEnviocorrecto := ::lSendOk

If ::lDeleteTemp
::DelFiles()
EndIf

::aTo := {}
::aCc := {}
::aBcc := {}
::aAf := {}
::aAtf := {}

Self := Nil

Return lEnviocorrecto
//----------------------------------------------------------------------------//


********************************************
FiveWiDi
 
Posts: 1058
Joined: Mon Oct 10, 2005 2:38 pm

Postby JoseLuis » Tue Oct 31, 2006 11:48 am

Perdona Carlos

Compilo tu clase con verce, y me da un error, ¿Donde puedo encontrar Obj2hb.ch? ya que de ahí me viene el error

Un saludo

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby FiveWiDi » Tue Oct 31, 2006 1:40 pm

JoseLuis wrote:Perdona Carlos

Compilo tu clase con verce, y me da un error, ¿Donde puedo encontrar Obj2hb.ch? ya que de ahí me viene el error

Un saludo

Jose Luis


Creo que en el include de Harbour.

Saludos y suerte
Carlos G.
FiveWiDi
 
Posts: 1058
Joined: Mon Oct 10, 2005 2:38 pm

Postby JoseLuis » Tue Oct 31, 2006 4:05 pm

Pues no lo encuentro a pesar de haber buscado en versiones anteriores

Si eres tan amable, me lo envias.

Un saludo

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Postby Maurilio Viana » Tue Oct 31, 2006 4:39 pm

Puedes dejar alguno ejemplo de como usar la clase y donde puedo bajar blat.exe?

Saludos de Brasil!
Maurilio
Last edited by Maurilio Viana on Fri Nov 03, 2006 1:13 pm, edited 1 time in total.
User avatar
Maurilio Viana
 
Posts: 252
Joined: Tue Oct 25, 2005 2:48 pm
Location: Garça/Garza/Heron City - Brazil

Postby FiveWiDi » Wed Nov 01, 2006 10:21 pm

JoseLuis wrote:Pues no lo encuentro a pesar de haber buscado en versiones anteriores

Si eres tan amable, me lo envias.

Un saludo

Jose Luis


Perdona, pertenece a la magnífica clase TDBF de Manuel Expósito.
Aquí adjunto su código:
*****************************
//----------------------------------------------------------------------------//
// AUTOR.....: Manuel Exp¢sito Su rez Soft 4U '98 //
// e-Mail....: expo2001@wanadoo.es //
// CLASE.....: Obj2Hb.CH //
// FECHA MOD.: 17/04/2002 //
// VERSION...: 12.00 //
// PROPOSITO.: Compatibiliza HARBOUR OOP con Objects //
//----------------------------------------------------------------------------//


#ifdef __HARBOUR__

#xtranslate AS ALL => AS ANYTYPE // Compatible con OBJECTS
#xtranslate AS BLOCK => AS CODEBLOCK

#xcommand DEFAULT <xVar1> := <xDefaultValue1> ;
[, <xVarN> := <xDefaultValueN> ] => ;
<xVar1> := If( <xVar1> == nil, <xDefaultValue1>, <xVar1> ); ;
[ <xVarN> := If( <xVarN> == nil, <xDefaultValueN>, <xVarN> );]

// Extraido de Objects.ch

#xtranslate BYNAME <V> [, <VN> ] => ::<V> := <V> [; ::<VN> := <VN> ]
#xtranslate BYNAME <V> DEFAULT <Val> => ::<V> := BYDEFAULT <V>, <Val>
#xtranslate BYDEFAULT <V>, <Val> => if( <V> == NIL, <Val>, <V> )
#xtranslate BYNAME <V> IFNONIL => if( <V> != NIL, ::<V> := <V>, )

#include "HBClass.ch"

#else

#include "Objects.ch"

#endif

//----------------------------------------------------------------------------//
*****************************

Saludos y suerte
Carlos G.
FiveWiDi
 
Posts: 1058
Joined: Mon Oct 10, 2005 2:38 pm

www.blat.net

Postby FiveWiDi » Wed Nov 01, 2006 10:27 pm

Maurilio Viana wrote:Pueder dejar alguno ejemplo de como usar la clase y donde puedo bajar blat.exe?

Saludos de Brasil!
Maurilio


En www.blat.net

En el código que dejé en este hilo puede verse su uso más sencillo; y mirando un poco el código creo que se entiende fácilmente.

Saludos y suerte
Carlos G.
FiveWiDi
 
Posts: 1058
Joined: Mon Oct 10, 2005 2:38 pm


Return to Utilities / Utilidades

Who is online

Users browsing this forum: No registered users and 7 guests