Page 1 of 2

Necesito ayuda con Tree

PostPosted: Wed Jan 19, 2022 10:25 pm
by Ramón J.
Hola a todos.

Estoy ahora tratando de hacer una función en la que se inscriban acuerdo de empresas en libros de inscripciones. Muchos de vosotros ya conoceréis lo que es un tomo de libro inscripciones del Registro de la Propiedad, por ejemplo, pero en este caso se trata de empresas en la que se inscriben acuerdos (no es el Registro Mercantil).

Pues estoy trantado de hacer con un splitter y un otree ver la forma de cómo hacerlo. Veréis, cada tomo contiene 200 folios (tamaño un poco menor que un A3), por anverso y reverso, y de lo que se trata es de digitalizar lo que hay en papel y continuar con el pdf generado de los libro sy a partir de ahí hacer las inscripciones con el acrobat profesional. El otree más o menos lo tengo claro, pero me gustaría que se vería en la ventana de la derecha el pdf.

Aquí tenéis una composición de la de lo que sería la idea:
Image

El código con el que he empezado el tema es este:

Code: Select all  Expand view
#include "FiveWin.ch"
#include "Splitter.ch"

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

function Main()

   local oWnd, oBar, oTree, oItem1, oItem2, oBmp1, oBmp2, oImageList, oSplit

   DEFINE WINDOW oWnd FROM 3, 6 TO 20, 70 ;
      TITLE "Libro de registro de empresas"

   DEFINE BUTTONBAR oBar OF oWnd _3D

   DEFINE BUTTON RESOURCE "open" OF oBar ACTION oTree:aItems[ 1 ]:Expand() ;
      TOOLTIP "Expand" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:aItems[ 1 ]:Collapse() ;
      TOOLTIP "Colapse" NOBORDER

   DEFINE BUTTON RESOURCE "open" OF oBar ACTION oTree:ExpandAll() ;
      TOOLTIP "Expand all items" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:ColapseAll() ;
      TOOLTIP "Colapse all items" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:GetSelected():SetText( Time() ) ;
      TOOLTIP "Change Text" NOBORDER

   oImageList = TImageList():New()

   oBmp1 = TBitmap():Define( "folder",, oWnd )
   oBmp2 = TBitmap():Define( "fldMask",, oWnd )

   oImageList:Add( oBmp1, oBmp2 )

   oTree = TTreeView():New( 2, 0, oWnd )

   oTree:bChanged = { || oWnd:SetText( If( oTree:GetSelected():GetParent() != nil,;
                                           oTree:GetSelected():GetParent():cPrompt + " + ", "" ) + ;
                                       oTree:GetSelText() ) }
   oTree:SetImageList( oImageList )

   oItem1 = oTree:Add( "Tomo 1" )

   oItem2 = oItem1:Add( "Folio 1" )
      oItem2:Add( "Anverso" )
      oItem2:Add( "Reverso" )

     oItem2 = oTree:Add( "Tomo 2" )

      oItem2 = oItem2:Add( "Folio 2" )
      oItem2:Add( "Anverso" )
      oItem2:Add( "Reverso" )

   



   @ 29, 200 SPLITTER oSplit ;
      VERTICAL _3DLOOK ;
      PREVIOUS CONTROLS oTree ;
      SIZE 4, 200 PIXEL ;
      OF oWnd

   ACTIVATE WINDOW oWnd ;
      ON RESIZE oSplit:AdjClient()

   oImageList:End()
   oBmp1:End()
   oBmp2:End()

return nil

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

procedure AppSys  // Xbase++ requirement

return

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

Re: Necesito ayuda con Tree

PostPosted: Wed Jan 19, 2022 11:38 pm
by cnavarro
Bueno, yo no creo que en tu caso sea necesario un tree ( usaria un browse con una lista de los "Folios" nada más ), pero a ver si te sirve de algo
Tendrás que aplicar en el bChange del oTree o en el click
Pero, para que veas lo que quiero decir, creo que te puede servir.

Code: Select all  Expand view

#include "FiveWin.ch"
#include "Splitter.ch"

Static oPdfActX
Static oPdfPdfX

// Pon un fichero que exista
Static cFilePdf  := "testrtf.pdf"

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

function Main()

   local oWnd, oBar, oTree, oItem1, oItem2, oBmp1, oBmp2, oImageList, oSplit

   DEFINE WINDOW oWnd FROM 3, 6 TO 700, 1200 PIXEL ;
      TITLE "Libro de registro de empresas"

   DEFINE BUTTONBAR oBar OF oWnd _3D

   DEFINE BUTTON RESOURCE "open" OF oBar ACTION oTree:aItems[ 1 ]:Expand() ;
      TOOLTIP "Expand" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:aItems[ 1 ]:Collapse() ;
      TOOLTIP "Colapse" NOBORDER

   DEFINE BUTTON RESOURCE "open" OF oBar ACTION oTree:ExpandAll() ;
      TOOLTIP "Expand all items" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:ColapseAll() ;
      TOOLTIP "Colapse all items" NOBORDER

   DEFINE BUTTON RESOURCE "close" OF oBar ACTION oTree:GetSelected():SetText( Time() ) ;
      TOOLTIP "Change Text" NOBORDER


   oImageList = TImageList():New()

   oBmp1 = TBitmap():Define( "folder",, oWnd )
   oBmp2 = TBitmap():Define( "fldMask",, oWnd )

   oImageList:Add( oBmp1, oBmp2 )

   oTree = TTreeView():New( 2, 0, oWnd )

   oTree:bChanged = { || oWnd:SetText( If( oTree:GetSelected():GetParent() != nil,;
                                           oTree:GetSelected():GetParent():cPrompt + " + ", "" ) + ;
                                       oTree:GetSelText() ) }
   oTree:SetImageList( oImageList )

   oItem1 = oTree:Add( "Tomo 1" )

   oItem2 = oItem1:Add( "Folio 1" )
      oItem2:Add( "Anverso" )
      oItem2:Add( "Reverso" )

     oItem2 = oTree:Add( "Tomo 2" )

      oItem2 = oItem2:Add( "Folio 2" )
      oItem2:Add( "Anverso" )
      oItem2:Add( "Reverso" )

   @ 29, 200 SPLITTER oSplit ;
      VERTICAL _3DLOOK ;
      PREVIOUS CONTROLS oTree ;
      HINDS CONTROLS oPdfActX ;
      SIZE 4, 200 PIXEL ;
      OF oWnd

   ACTIVATE WINDOW oWnd ;
      ON INIT ( ShowPdf1( oWnd, cFilePdf, oBar:nBottom + 2, oSplit:nRight + 2, oWnd:nWidth - oSplit:nRight - 10, oWnd:nBottom - oBar:nBottom - 20 ) ) ;
      ON RESIZE oSplit:AdjClient()

   oImageList:End()
   oBmp1:End()
   oBmp2:End()

return nil

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

procedure AppSys  // Xbase++ requirement

return

//----------------------------------------------------------------------------//
 
Static Function ShowPDF1( oWnd, cFile, nT, nL, nW, nH )

   hb_default( @nT, 0 )
   hb_default( @nL, 0 )
   hb_default( @nW, oWnd:nWidth/2 - 4 )
   hb_default( @nH, oWnd:nHeight/2 - 19 )
   if Valtype( oPdfActX ) != "O"
      oPdfActX  := TActiveX():New( oWnd, "AcroPDF.PDF.1", nT, nL, nW, nH )
      if !Empty( oPdfActX ) .and. Valtype( oPdfActX ) = "O"
         //oPdfActX:nDlgCode = DLGC_WANTALLKEYS
         //oPdfActX:bLClicked := { || MsgInfo( "Hello1" ) }
         //oPdfActX:bGotFocus := { || oWnd:SetFocus() }
         //oPdfActX:bOnEvent := { | event, aParams, pParams | EventInfo( event, aParams, pParams ) }
         VerDocPdf( cFile )
      endif
   else
      VerDocPdf( cFile )
   endif
Return oPdfActX

//----------------------------------------------------------------------------//
// https://metacpan.org/pod/Wx::ActiveX::Acrobat#SetPageMode
//----------------------------------------------------------------------------//

Static Function VerDocPdf( cFile )
   local cOld
   local oE
   hb_default( @cFile, "" )
   cFile    := AllTrim( cFile )
   if Valtype( oPdfActX ) = "O"
      TRY
         SysWait( 0.5 )
         cOld   := oPdfActX:Src()
         if ( Valtype( cOld ) = "C" .and. cFile != "-" .and. ;
              Upper( AllTrim( cFile ) ) != Upper( AllTrim( cOld ) ) ) .or. Empty( cOld )
            oPdfActX:Do( "GetVersions" )
            oPdfActX:Do( "setShowToolbar", 0 )
            oPdfActX:Do( "setShowScrollbars", 0 )
            //oPdfActX:Do( "setView", "fitB" ) //"fitH" )
            oPdfActX:Do( "setPageMode", "none" )  //, "bookmarks" )  //

//            oPdfActX:Do( "setLayoutMode", "SinglePage" )
            oPdfActX:Do( "setLayoutMode", "TwoColumnLeft" )

            oPdfActX:Do( "LoadFile", cFile )
            oPdfActX:Do( "SetCurrentPage", 1 )
            //oPdfActX:Do( "postMessage", 0 )

            // Ver "setView"
            //oPdfActX:SetZoom( 51.0 )        // 1 .. 100 %

            oPdfActX:Show()
            //oPdfActX:Refresh()
            //SysRefresh()
         endif
      CATCH oE
         if cFile != "-" .and. !Empty( cFile )
            MsgInfo( cFile, "No se ha podido cargar el Documento" )
         endif
      END
   endif

Return oPdfActX

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

Static Function EventInfo( event, aParams, pParams )

   local n
   local cMsg := "Event: " + cValToChar( event ) + CRLF
   cMsg += "Params: " + CRLF
   for n := 1 to Len( aParams )
      cMsg += cValToChar( aParams[ n ] ) + CRLF
   next
Return cMsg

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

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 6:42 am
by Antonio Linares
Ramón,

Revisa FWH\samples\pim.prg

buildh.bat pim

Ya que tiene mucha de la funcionalidad que comentas, la diferencia es que en el lado derecho se usa un control RichEdit,
pero desde ese RichEdit puedes mostrar letras de distintos tamaños y colores, e imágenes :-)

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 7:10 am
by Ramón J.
Gracias, Cristóbal, Antonio. Probaré vuestras sugerencias.

Saludos

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 7:22 am
by Ramón J.
Antonio, perdona que te moleste. He intentado compilar pimp.prg como me has sugerido pero me da este error:
 
Compiling...
Harbour 3.2.0dev (r2008190002)
Copyright (c) 1999-2020, https://harbour.github.io/
Compiling 'pim.prg' and generating preprocessed output to 'pim.ppo'...
pim.prg(6) Error F0029 Can't open #include file 'c:\harbour\contrib\xhb\hbxml.ch'
* Compile errors *

C:\fwh\samples>

Efectivamente, dentro de Harbour no tengo la carpeta de contrib. ¿Dónde se puede conseguir para compilar pim.prg y probarlo?

Un saludo

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 7:37 am
by Ramón J.
Buenos días, Cristóbal

Al compilar tu ejemplo, me da este error:

Image

Saludos

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 8:44 am
by Antonio Linares
Ramón J. wrote:Antonio, perdona que te moleste. He intentado compilar pimp.prg como me has sugerido pero me da este error:
 
Compiling...
Harbour 3.2.0dev (r2008190002)
Copyright (c) 1999-2020, https://harbour.github.io/
Compiling 'pim.prg' and generating preprocessed output to 'pim.ppo'...
pim.prg(6) Error F0029 Can't open #include file 'c:\harbour\contrib\xhb\hbxml.ch'
* Compile errors *

C:\fwh\samples>

Efectivamente, dentro de Harbour no tengo la carpeta de contrib. ¿Dónde se puede conseguir para compilar pim.prg y probarlo?

Un saludo


https://github.com/harbour/core/tree/master/contrib

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 9:29 am
by Ramón J.
Gracias, Antonio

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 10:52 am
by cnavarro
Pues es muy raro
Si construyes el ejemplo tal cual lo he puesto me funciona correctamente
Image

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 11:47 am
by karinha
cnavarro wrote:Pues es muy raro
Si construyes el ejemplo tal cual lo he puesto me funciona correctamente
Image


Desde cual version esto ejiste? Esto no funciona bien.

Code: Select all  Expand view

   ACTIVATE WINDOW oWnd ;
      ON INIT ( ShowPdf1( oWnd, cFilePdf, oBar:nBottom + 2, oSplit:nRight + 2, oWnd:nWidth - oSplit:nRight - 10, oWnd:nBottom - oBar:nBottom - 20 ) ) ;
      ON RESIZE oSplit:AdjClient()
 


Saludos

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 1:58 pm
by Ramón J.
Cristóbal, lo he copiado tal cual lo has puesto y lo he compilado. No he tocado nada. Tengo la versión FWH 20-12

Saludos

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 4:45 pm
by cnavarro
Ramón, prueba comentando la clausula ON RESIZE y me dices

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 7:10 pm
by Ramón J.
Cristóbal, he probado quitando la claúsula ON RESIZE y ya no da error, pero no muestra el pdf. Me he asegurado de que el pdf "testrtf.pdf" está en el mismo directorio que el exe que genera.

Mira cómo sale:

Image

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 7:36 pm
by karinha
Master Navarro, compilando PIM.PRG me genera este error, que esta errado?


Code: Select all  Expand view



PIM.prg(214) Error E0030  Syntax error: "syntax error at '@'"

   @ 0, 205 RICHEDIT5 oMemo VAR cItemText OF oWndData SIZE 300, 100 PIXEL BARBUTTON ;
      ON CHANGE ( cItemText := oMemo:SaveAsRTF(), oBtnSave:Enable(), oMemo:Cargo := .T.,;
                  If( oTree:GetSelected() != nil, oTree:GetSelected():Cargo := cItemText,) )
 


Regards, saludos.

Re: Necesito ayuda con Tree

PostPosted: Thu Jan 20, 2022 8:04 pm
by Ramón J.
João

Code: Select all  Expand view
@ 0, 205 RICHEDIT5 oMemo VAR cItemText OF oWndData SIZE 300, 100 PIXEL BARBUTTON ;
      ON CHANGE ( cItemText := oMemo:SaveAsRTF(), oBtnSave:Enable(), oMemo:Cargo := .T.,;
                  If( oTree:GetSelected() != nil, oTree:GetSelected():Cargo := cItemText,) )                  
                 
   oMemo:Cargo = .F. // it has not changed   <----- João, esto lo tienes?