A vueltas con TWORD

Post Reply
User avatar
ander7319
Posts: 21
Joined: Tue Feb 10, 2009 12:47 pm

A vueltas con TWORD

Post 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!!!
FWH 12.12 HB 3.2 BCC 5.82
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: A vueltas con TWORD

Post by mastintin »

a mi me funciona :

Code: Select all


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

 
User avatar
ander7319
Posts: 21
Joined: Tue Feb 10, 2009 12:47 pm

Re: A vueltas con TWORD

Post 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.
FWH 12.12 HB 3.2 BCC 5.82
User avatar
ander7319
Posts: 21
Joined: Tue Feb 10, 2009 12:47 pm

Re: A vueltas con TWORD

Post 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
FWH 12.12 HB 3.2 BCC 5.82
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: A vueltas con TWORD

Post 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.
User avatar
ander7319
Posts: 21
Joined: Tue Feb 10, 2009 12:47 pm

Re: A vueltas con TWORD

Post 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.
FWH 12.12 HB 3.2 BCC 5.82
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: A vueltas con TWORD

Post 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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: A vueltas con TWORD

Post by Silvio.Falconi »

Sorry where is tword ? I not found it on fwh...
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: A vueltas con TWORD

Post by cnavarro »

Silvio.Falconi wrote:Sorry where is tword ? I not found it on fwh...

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

Saludos
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Post Reply