FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour A vueltas con TWORD
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
A vueltas con TWORD
Posted: Thu Feb 14, 2013 09:48 AM
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 (fw): Select all Collapse
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 (fw): Select all Collapse
   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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: A vueltas con TWORD
Posted: Thu Feb 14, 2013 10:52 AM
a mi me funciona :
Code (fw): Select all Collapse
METHOD SetMainDoc() CLASS TWord
       ::oActiveDoc:ActiveWindow:View:SeekView:= 0
       ::oSelection := ::oActiveDoc
  return nil
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: A vueltas con TWORD
Posted: Thu Feb 14, 2013 04:24 PM
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
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: A vueltas con TWORD
Posted: Fri Feb 15, 2013 09:02 AM
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 (fw): Select all Collapse
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 (fw): Select all Collapse
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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: A vueltas con TWORD
Posted: Fri Feb 15, 2013 09:59 AM
Mira cambiandolo asi en cada llamada de 'Transparency' :
Code (fw): Select all Collapse
 case n = 3 .and. afondo[n] <> NIL
    //       oFill:Set( 'Transparency', afondo[3])
     oFill:Transparency := afondo[3]


Saludos.
Posts: 21
Joined: Tue Feb 10, 2009 12:47 PM
Re: A vueltas con TWORD
Posted: Sat Feb 16, 2013 09:06 AM
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 (fw): Select all Collapse
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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: A vueltas con TWORD
Posted: Sat Feb 16, 2013 01:09 PM

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

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: A vueltas con TWORD
Posted: Sun Feb 17, 2013 09:29 PM

Sorry where is tword ? I not found it on fwh...

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: A vueltas con TWORD
Posted: Sun Feb 17, 2013 10:31 PM
Silvio.Falconi wrote:Sorry where is tword ? I not found it on fwh...



viewtopic.php?f=17&t=6849

Saludos
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

Continue the discussion