Page 1 of 1

A vueltas con TWORD

Posted: Thu Feb 14, 2013 9:48 am
by ander7319
Estoy adaptando un programa a la última versión de Harbour y FWH. El programa original elaboraba en word cartas desde cero, conteniendo imágenes, cuadros de texto, etc.
¿Alguien tiene funcionando esta con HARBOUR 3? A mi me está fallando el siguiente método:

Code: Select all

METHOD SetMainDoc() CLASS TWord
       local oWindow := ::oActiveDoc:Get( "ActiveWindow" )
       local oView   := oWindow:Get( "View")
       oView:Set( "SeekView" , 0 )
       ::oSelection := ::oActiveDoc
       release oWindow, oView
       RETURN nil
Arrojando este error:

Code: Select all

   Compiler version: Harbour 3.2.0dev (Rev. 18449)
   FiveWin  Version: FWH 12.12
   Windows version: 5.1, Build 2600 Service Pack 3

   Time from start: 0 hours 0 mins 18 secs 
   Error occurred at: 14.02.2013, 09:48:46
   Error description: (DOS Error -2147352572) WINOLE/1007  Error de argumento: SET
   Args:
     [   1] = C   SeekView
     [   2] = N   0

Stack Calls
===========
   Called from:  => TOLEAUTO:SET( 0 )
   Called from: .\source\classes\TWORDHB.PRG => TWORD:SETMAINDOC( 792 )


Y la verdad... no sé cómo solucionarlo. ¡¡¡¡SOCORRO!!!

Re: A vueltas con TWORD

Posted: Thu Feb 14, 2013 10:52 am
by mastintin
a mi me funciona :

Code: Select all


METHOD SetMainDoc() CLASS TWord
       ::oActiveDoc:ActiveWindow:View:SeekView:= 0
       ::oSelection := ::oActiveDoc
  return nil

 

Re: A vueltas con TWORD

Posted: Thu Feb 14, 2013 4:24 pm
by ander7319
Gracias. Sustituyendo el Metodo tal como lo tenía yo por el que tú has mencionado... a mi tampoco me falla... ahí. Ahora me falla el médodo WRITE en el argumento SIZE. Y esto por ahora... que quedan 12 llamadas distintas más a la clase.

Sería posible que me dijeses dónde puedo obtener una versión correcta de la clase TWORD (no la he encontrado en el foro) o si no es molestia me podrías enviar una copia de la que tú manejas a mi dirección de email: a.perez@barrilero.es

Muchas gracias de antemano por la enorme ayuda, y un saludo.

Re: A vueltas con TWORD

Posted: Fri Feb 15, 2013 9:02 am
by ander7319
Yo creo que ya es la última llamada a TWORD que me queda por corregir, pero estoy bloqueado o ya le he hecho tantas pruebas que no sé ni lo que hago, no sé. ¿Alguna sugerencia?

Esta es la llamada al método

Code: Select all

oWord:TextBox( 03.10, 16.50, 03.90, 19.20, aText[ni][1], oFnt[2], , ,1, {,,.T.,,,,,},{,,,.T.,,},,)
Este es el código del método que yo tengo, la versión que está en el foro

Code: Select all

METHOD TextBox( nTop, nLeft, nBottom, nRight, cTexto, oFuente, nclrtext, nClrBack, nJustify, afondo, alinea, lvertadjust, norientacion) CLASS TWord
       local oShapes,oCuadro,oFill,oLinea, oFontC, oText, oCuadroText
       local nPad := 0, n, oWrap, nheighttext,;
             lnocabe := .f.,  nheightbox:= 0

       DEFAULT nTop := 0, nLeft := 0, nBottom := 10, nRight := 10,;
               cTexto := ' ', oFuente := TFont():New(),;
               nClrText := nRGB(0,0,0), nJustify := 0,;
               afondo := {}, alinea := {}, lvertadjust := .f.,;
               norientacion := 1

       nheighttext := oFuente:nHeight

       if norientacion > 3
          norientacion := 1
       endif
       do case
          case nJustify = 1
               nPad := 2
          case nJustify = 2
               nPad := 1
          case nJustify = 6
               nPad := 0
       endcase
       if ::lsetcm
          nTop := nTop*28.35
          nLeft := nLeft*28.35
          nBottom := nBottom*28.35
          nRight := nRight*28.35
       endif

       oShapes     := ::oSelection:Get( "Shapes" )
       oCuadro     := oShapes:Invoke( "AddTextbox", norientacion,INT(nLeft),INT(nTop),INT(nRight-nLeft),INT(nBottom-nTop) )
       oFill       := oCuadro:Get( "Fill" )

       oCuadro:Set( 'RelativeHorizontalPosition',1)
       oCuadro:Set( 'RelativeVerticalPosition',1)

       //Fill
       for n = 1 to len(afondo)
           do case
              case n = 1 .and. afondo[n] <> NIL
                   oFillColor  := oFill:Get( "ForeColor")
                   oFillColor:Set( 'RGB', afondo[1] )
              case n = 2 .and. afondo[n] <> NIL
                   oFillColor  := oFill:Get( "BackColor")
                   oFillColor:Set( 'RGB', afondo[2] )
              case n = 3 .and. afondo[n] <> NIL
                   oFill:Set( 'Transparency', afondo[3])
              case n = 4 .and. afondo[n] <> NIL
                   oFill:Invoke( 'TwoColorGradient', afondo[4], afondo[5] )
              case n = 6 .and. afondo[n] <> NIL
                   oFill:Invoke( 'Patterned', afondo[6] )
              case n = 7 .and. afondo[n] <> NIL
                   oFill:Invoke(  'PresetTextured', afondo[7] )
              case n = 8 .and. afondo[n] <> NIL
                   oFill:Invoke(  'UserTextured' , afondo[8] )
           endcase
       next n

       //Linea de contorno
       oLinea      := oCuadro:Get(  "Line" )

       for n = 1 to len(alinea)
           do case
              case n = 1
                   oLinea:Set( "Weight", alinea[1] )
              case n = 2
                   oLinea:Set(  "ForeColor", alinea[2] )
              case n = 3
                   oLinea:Set(  "BackColor", alinea[3] )
              case n = 4
                   oLinea:Set(  "Transparency", alinea[4])
              case n = 5
                   oLinea:Set(  "DashStyle", alinea[5] )
              case n = 5
                   oLinea:Set(  "Style", alineas[6] )
           endcase
       next n


       oCuadroText := oCuadro:Get( "TextFrame" )
       oText       := oCuadroText:Get( "TextRange" )
       oFontC      := oText:Get( "Font")
       oFontC:Set( "Name"  , oFuente:cFaceName )
       oFontC:Set( "Size"  , INT(oFuente:nHeight)  )
       oFontC:Set( "Bold"  , oFuente:lBold     )
       oFontC:Set( "Color" , nclrtext )
       oText:Set(  'HighlightColorIndex', nClrBack )
       oText:Set(  "Text", cTexto )
       oParagraph  := oText:Get( "ParagraphFormat")
     oParagraph:Set( "Alignment", nPad )


       if lvertadjust
          nheightbox := 0
          oCuadro:Set( 'Height', nheightbox)
          ::oActiveDoc:Invoke( 'ComputeStatistics',2,.t.)
          lnocabe := oCuadroText:Get( 'Overflowing')
          nheightbox := nheightbox + nHeighttext //+ OleGetProperty(oParagraph,'SpaceBefore')
          do whil lnocabe = .t. .and. nheightbox <= nBottom - nTop
             oCuadro:Set( 'Height', nheightbox)
             oText:Set( "Text", cTexto )
             ::oActiveDoc:Invoke( 'ComputeStatistics',2,.t.)
             lnocabe := oCuadroText:Get( 'Overflowing')
             nheightbox := nheightbox + nHeighttext //+ OleGetProperty(oParagraph,'SpaceBefore')
          enddo

       else
          ::oActiveDoc:Invoke( 'ComputeStatistics',2,.t.)
          lnocabe := oCuadroText:Get( 'Overflowing')
          nheightbox := nBottom
       endif

       lcorta := lnocabe
       ctexto2 := ctexto
       do whil lcorta .and. !empty(ctexto2)
          ctexto2 := Dellastword(ctexto2)
          oText:Set( 'Text', ctexto2)
          ::oActiveDoc:Invoke('ComputeStatistics',2,.t.)
          lcorta := oCuadroText:Get( 'Overflowing')
       enddo

       ::ctextoverflow := strtran(ctexto, ctexto2, '')
       ::loverflowing := lnocabe
       ::oLastSay := otext

       release oParagraph, OLinea, oFillColor, oFill, oFontC, oText,oCuadroText, oCuadro

       if ::lsetcm
             ::nlastrow := nBottom/28.35
       else
             ::nlastrow := nBottom
       endif

       RETURN Nil
No hay manera, el argumento en "Transparency" da error

Re: A vueltas con TWORD

Posted: Fri Feb 15, 2013 9:59 am
by mastintin
Mira cambiandolo asi en cada llamada de 'Transparency' :

Code: Select all


 case n = 3 .and. afondo[n] <> NIL
    //       oFill:Set( 'Transparency', afondo[3])
     oFill:Transparency := afondo[3]
 
Saludos.

Re: A vueltas con TWORD

Posted: Sat Feb 16, 2013 9:06 am
by ander7319
Muchas gracias.

Esta vez el problema no era ese o al meno no sólo ese.... aunque ya lo he resuelto por el sistema de "prueba y error"

A TRANSPARENCY no se le debe pasar (ahora?) un valor lógico sino un número. Pasando un 1 funciona perfectamente. Gracias de nuevo

Code: Select all

oWord:TextBox( 03.10, 16.50, 03.90, 19.20, aText[ni][1], oFnt[2], , ,1, {,,1,,,,,},{,,,1,,},,)
Un Saludo y gracias.

Re: A vueltas con TWORD

Posted: Sat Feb 16, 2013 1:09 pm
by cnavarro
Buenos dias
Estoy usando FWH 1203 y Harbour 3.2 (31/05/2012) con BCC582
Hasta ahora usaba la Clase TOleauto.Prg y Ole2.c para realizar llamadas a Ole, pero si he entendido bien Harbour ya lo contiene, antes con la lib Hbole, y ahora HbWin (de hecho la libreria hbole ya no aparece en esa versión), por lo que he quitado esos fuentes para probar.
Cuando intento compilar, bien, pero a la hora del linkado, obtengo el siguiente error:
Error: Unresolved external '_HB_FUN_OLEUNINITIALIZE' referenced from C:\VERCE43\APLI\TWORD.OBJ
Qué estoy haciendo mal?
Gracias

Investigando........

Ya he visto la llamada a dicha funcion OleUninitialize() en el método End(), y también en el programa Olecore.c de Harbour, pero no entiendo por qué da error de linkado
Gracias

Re: A vueltas con TWORD

Posted: Sun Feb 17, 2013 9:29 pm
by Silvio.Falconi
Sorry where is tword ? I not found it on fwh...

Re: A vueltas con TWORD

Posted: Sun Feb 17, 2013 10:31 pm
by cnavarro
Silvio.Falconi wrote:Sorry where is tword ? I not found it on fwh...

http://forums.fivetechsupport.com/viewt ... =17&t=6849

Saludos