Quien me puede aclarar esta Duda IMPRIMIR MAS De Una Pagina

Quien me puede aclarar esta Duda IMPRIMIR MAS De Una Pagina

Postby remtec » Sat Mar 09, 2019 12:08 am

Amigos

Disculpen mi ignorancia.

Algun amigo me puede explicar lo que significa este Código que esta en Testrtf5.prg, en la función " function PrintBox( lPreview,oRTF ) ":

Code: Select all  Expand view  RUN

         oPrn:Box( aRTF[ 2 ], 500, aRTF[ 2 ] + 1000, 1500 )

                 aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
                             oRTF:IsSelection(), ;
                             aRTF[ 2 ] + 10, 510, 1490, aRTF[ 2 ] + 990, aRTF[ 1 ] )

 

Que representa lo siguiente:
hWnd = ??
aRTF[ 2 ] = ??
IsSelection() = ??
hDCOut = ??
hDC = ??

Desde ya muchas gracias por su ayuda

Saludos
Antonio
Last edited by remtec on Tue Mar 12, 2019 2:43 pm, edited 2 times in total.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby carlos vargas » Sat Mar 09, 2019 12:44 am

Esto es por experiencia no es por que me lo explicaran, asi que puedo estar equivocado

hWnd

en windows todos los controles son ventanas, cada una con sus propias características las cuales les permite al sistema saber que hacer con ellas, en fwh la clase windows es la madres de las ventanas, dialogos, ventanas mdi, ventanas child, todos los controles, ya sean nativos o no, es en la data hWnd donde se almacena el valor de la estructura que define a ese control o ventana.

ejemplo:
Code: Select all  Expand view  RUN

   if ! Empty( oWnd:hWnd )
      ::Create( CTRL_CLASS )
      ::SendMsg( WM_SETFONT, ::oFont:hFont, 0 )
      ::Default()
      oWnd:AddControl( Self )
   else
      oWnd:DefControl( Self )
   endif
....
         ::hWnd = CreateWindowExW( cClsName, ::cCaption, ::nStyle, ;
                                ::nLeft, ::nTop, ::nRight - ::nLeft + 1, ;
                                ::nBottom - ::nTop + 1, ;
                                If( ::oWnd != nil, ::oWnd:hWnd, 0 ), ;
                                ::nId,, ::nExStyle )
 

oWnd:hWnd,oDlg:hWnd,oButton:hWnd,oXbrowse:hWnd... oRichedit:hWnd


IsSelection()

Me imagino que es una data de la clase que nos permite saber si hay un bloque de texto seleccionado o no.

Code: Select all  Expand view  RUN

METHOD IsSelection() CLASS TRichEdit

   local aGetSel := ::GetSelection()

return aGetSel[ 1 ] != aGetSel[ 2 ]
...
METHOD GetSelection() CLASS TRichEdit

   local nStart := 0
   local nEnd   := 0

   REGetSelection( ::hWnd, @nStart, @nEnd )

return { nStart, nEnd }
 


hDC

es un dispositivo de contexto, es como un área de la ventana a control de la cual se puede extraer informacion de lo que contiene, como por ejemplo un texto, un color o similar.
aca por ejemplo se dibuja una elipse en esa area (es como un lienzo)
Code: Select all  Expand view  RUN

METHOD Circle( nRow, nCol, nWidth ) CLASS TWindow

   ::GetDC()
   Ellipse( ::hDC, nCol, nRow, nCol + nWidth - 1, nRow + nWidth - 1 )
   ::ReleaseDC()

return nil
 


hDCOut

lo mismo de lo anterior pero para efectuar acciones similares.

aRTF[ 2 ]
me parece que esto imprimir el texto contenido en el control trichedit5 en el area que definamos con hDC
Code: Select all  Expand view  RUN

METHOD PrintBox( hDC, nTop, nLeft, nRight, nBottom, nFrom ) CLASS TRichEdit5

   DEFAULT nFrom := 0

   if hDC != 0
      nFrom := REPrintBox5( ::hWnd, hDC, ::IsSelection(), ;
                           nTop, nLeft, nRight, nBottom, nFrom )
   endif

return nFrom
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Quien me puede aclarar esta Duda.

Postby remtec » Sat Mar 09, 2019 1:36 am

Hola Carlos

Muchas gracias por tu explicación, la verdad que hice unas pruebas aplicando lo que entendi, pero no logro dar con la solucion.

Muchos Saludos.
Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby cnavarro » Sat Mar 09, 2019 2:49 am

Antonio, pon un pequeño ejemplo con un control rtf que contenga un texto enriquecido y un boton de "imprimir", y podemos trabajar sobre él
Como muy bien te ha explicado Carlos,

// Definimos las coordenadas ( en unidades de impresora ), del box ( rectángulo ) que se va a pintar en la impresora ( o en la pantalla si lo mandas a Preview )
oPrn:Box( aRTF[ 2 ], 500, aRTF[ 2 ] + 1000, 1500 )


// hWnd -> identificador de la ventana ( area ) del control, cada control, diálog o ventana tiene un hWnd que lo representa
Es una data de cada control, y se genera de forma automática al crear el control. Tú solo necesitas usarla.
// Para estos dos: mira esto -> https://docs.microsoft.com/en-us/window ... user-getdc
// hDCOut: si es a pantalla
// hDC: si es a impresora

// IsSelection: si hay texto seleccionado o no

aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
oRTF:IsSelection(), ;
aRTF[ 2 ] + 10, 510, 1490, aRTF[ 2 ] + 990, aRTF[ 1 ] )

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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Quien me puede aclarar esta Duda.

Postby remtec » Sat Mar 09, 2019 4:06 pm

Hola Cesar

Muchas gracias por tu tiempo y tremenda explicación.

Gran Maestro, con tu Ayuda y la de Carlos, he logrado entender, muchas gracias a ambos por su dedicación.

Muchos Saludos.
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby remtec » Mon Mar 11, 2019 12:44 pm

Hola Cesar.

Como estas?

Una consulta sobre la exaplicacion.

Todo lo demas bastante claro, pero no entendi cual es la variable que trae el texto a imprimir, " oRTF:IsSelection "?

Muchos saludos
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby cnavarro » Mon Mar 11, 2019 12:59 pm

Antonio,
Si te refieres a mi explicación, mi nombre es Cristobal, y si utilizas la function REPrintBox, no necesitas conocer la data que contiene el texto, ya que la function se ocupa de extraer el texto del control
De todas formas puedes intentar conocer el texto del control con el método oRtf:cText()
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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Quien me puede aclarar esta Duda.

Postby remtec » Mon Mar 11, 2019 2:11 pm

Cristobal

Que tremendo ERROR, mil disculpas por haberme equivocado en tu nombre, me quede con una consulta que hice en otro Post mas abajo, sobre un codigo que me facilito Cesar. Reitero mis disculpas.

Si mi pregunta era para ti, muy agradecido por todo lo que haces y todo el tiempo que destinas a ayudarnos.

Mi duda viene de usar esta Function para pasarle una variable con contenido enriquesido y mandar a imprimir directo a la impresora.

Muchos Saludos.
Antonio.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby cnavarro » Mon Mar 11, 2019 3:20 pm

remtec wrote:Cristobal

Mi duda viene de usar esta Function para pasarle una variable con contenido enriquesido y mandar a imprimir directo a la impresora.


Como te dije antes, esa function se ocupa de todo
si utilizas la function REPrintBox, no necesitas conocer la data que contiene el texto, ya que la function se ocupa de extraer el texto del control
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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Quien me puede aclarar esta Duda.

Postby remtec » Mon Mar 11, 2019 3:24 pm

Cristobal

Mil gracias por tu ayuda y mil disculpas por molestar tanto.

Lo que no he podido hacer funcionar que desde el Boton "#8034", vaya a imprimir el contenido cd la variable cTxt a la Function Printbox().

Muhos Saludos
Antonio

Codigo de Prueba Origen Texto Enriquecido:
Code: Select all  Expand view  RUN

#include "FiveWin.ch"

function Main()

   local oDlg, oRich
   local hRichDLL := LoadLibrary( "riched20.dll" )
   local lSyntaxHL := .f.

     local tbl[3][4] , cName1

     Static cTxt := ""

     use exa2
         go top
     
        cTxt=exa2->cod_det
        closearea()

        DEFINE DIALOG oDlg RESOURCE "#100"


   oRich = TRichEdit():Redefine( 100, bSETGET( cTxt ), oDlg )
   
     oRich:SetText( cTxt )

     REDEFINE BTNBMP ID 153 Resource "GRABA" OF oDlg TOOLTIP "Graba Informe"  TRANSPARENT ADJUST 2007;
                         ACTION (cTxt := oRich:SaveAsRTF(),Graba(cTxt))

     REDEFINE BTNBMP ID 4012 Resource "#8034" OF oDlg TOOLTIP "Imprime Informe"  TRANSPARENT ADJUST 2007;
                         ACTION  .................

     REDEFINE BTNBMP ID 152 Resource "#8004" OF oDlg TOOLTIP "Volver a Lista de Pacientes" TRANSPARENT ADJUST 2007;
                         ACTION (oDlg:END())


   ACTIVATE DIALOG oDlg CENTERED ;  //
      ON INIT ( oRich:LoadRtf( cTxt ), oRich:PostMsg( WM_KEYDOWN, VK_HOME, 0 ) ) ; //oRich:SetText( cTxt ) ;  //
      VALID ( cTxt := oRich:SaveAsRTF(), .T. ) // oRich:GetText(), .T. )

  FreeLibrary( hRichDLL )
 Return nil


 


Function PrintBox()
Code: Select all  Expand view  RUN


function PrintBox( lPreview )

   local oPrn
   local aRTF := { 100, 1000 }  // { nFrom, nTop }

   //DEFAULT lPreview := .f.

   if lPreview
      PRINT oPrn NAME "FWH RICHEDIT FILE" PREVIEW
   else
      PRINT oPrn NAME "FWH RICHEDIT FILE"
   endif

      if Empty( oPrn:hDC )
         MsgStop( "Printer not ready!" )
         return nil
      endif

      PAGE
         CursorWait()
         oPrn:Box( aRTF[ 2 ], 500, aRTF[ 2 ] + 1000, 1500 )

                 aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
                             oRTF:IsSelection(), ;
                             aRTF[ 2 ] + 10, 510, 1490, aRTF[ 2 ] + 990, aRTF[ 1 ] )

         CursorArrow()
      ENDPAGE

   ENDPRINT

return nil

 
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Quien me puede aclarar esta Duda.

Postby cnavarro » Mon Mar 11, 2019 7:25 pm

Prueba esto

Code: Select all  Expand view  RUN


#include "FiveWin.ch"
#include "richedi5.ch"

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

function Main()

   local oDlg
   local oRich
   //local hRichDLL  := LoadLibrary( "riched20.dll" )
   local lSyntaxHL := .f.
   local cTxt      := ""
   local uVal

   FWSetLanguage( 2 )

    USE RTFCODE
    GO TOP
    cTxt     += rtfcode->memcode
    CLOSE

   //? cTxt
   // Simulo la lectura del contenido del campo
   //cTxt  :=  "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Microsoft Sans Serif;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}" + ;
   //          "{\colortbl ;\red128\green0\blue0;\red0\green0\blue0;\red0\green128\blue0;\red255\green0\blue0;}" + ;
   //          "\viewkind4\uc1\pard\cf1\b\i\f0\fs28 JH\cf2\b0\i0  - Sue let me \cf3 know\cf2  that their rep had noticed that they were not performing the yearly \cf4\ul\b\fs24 escrow\cf2\ulnone\b0\fs28  analysis.\cf0\f1\fs17\par" + ;
   //          "}"

   DEFINE DIALOG oDlg RESOURCE "Test"
   oDlg:lHelpIcon   := .F.

   REDEFINE BUTTON ID 110 ;
      ACTION ( oRich:SetText( cTxt ) )

   REDEFINE CHECKBOX lSyntaxHL ID 115 OF oDlg ;
      ON CHANGE ( oRich:lHighLight := lSyntaxHL, ;
                  oRich:SetText( oRich:GetText() ) )

   REDEFINE BUTTON ID 120 ;
      ACTION oRich:LoadFromRTFFile( cGetFile( "RTF file (*.rtf) | *.rtf" ) )
     
   REDEFINE BUTTON ID 130 ;
      ACTION oRich:SaveToRTFFile( cGetFile( "RTF file (*.rtf) | *.rtf",;
                                  "Please write a filename", "test" ) )
       
   REDEFINE BUTTON ID 998 ACTION PrintBox( oRich, .T. )
   //( oRich:GoToLine( 10 ), oRich:SetFocus() )

   oRich := TRichEdit5():Redefine( 100, bSETGET( cTxt ), oDlg )
   //oRich:lHighLight = .T.

   ACTIVATE DIALOG oDlg CENTERED ;  //
      ON INIT ( oRich:LoadRtf( cTxt ), oRich:PostMsg( WM_KEYDOWN, VK_HOME, 0 ) ) ; //oRich:SetText( cTxt ) ;  //
      VALID ( cTxt := oRich:SaveAsRTF(),  .T. ) // oRich:GetText(), .T. )

   //MemoEdit( cTxt )
   //MemoEdit( uVal )
   //XBrowse( hb_aTokens( uVal ) )

   //FreeLibrary( hRichDLL )

return nil

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

function PrintBox( oRtf, lPreview )

   local oPrn
   local aRTF := { 100, 1500 }  // { nFrom, nTop }

   DEFAULT lPreview := .f.    // if .T., to screen

   if lPreview
      PRINT oPrn NAME "FWH RICHEDIT FILE" PREVIEW
   else
      PRINT oPrn NAME "FWH RICHEDIT FILE"
   endif

      if Empty( oPrn:hDC )
         MsgStop( "Printer not ready!" )
         return nil
      endif

      PAGE
         CursorWait()
         oPrn:Box( aRTF[ 1 ] + 10, 90, aRtf[ 2 ] + 1000, aRTF[ 1 ] + 1010 )

/*
      nFrom := REPrintBox5( ::hWnd, hDC, ::IsSelection(), ;
                           nTop, nLeft, nRight, nBottom, nFrom )
     // El ultimo parámetro indica a partir de qué número de carácter dentro del texto quieres empezar a imprimir.
*/

         aRTF := REPrintBox5( oRTF:hWnd, If( lPreview, oPrn:hDCOut, oPrn:hDC ), ;
                              oRTF:IsSelection(), ;
                              aRTF[ 1 ] + 20, 110, aRTF[ 1 ] + 1000, aRtf[ 2 ] + 990, 0 )

         CursorArrow()
      ENDPAGE

   ENDPRINT

return nil

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

 


Necesitas el RC

Code: Select all  Expand view  RUN


#include "winapi.ch"

#define IDC_EDIT1   101
Test DIALOG 41, 64, 409, 199
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Testing the RichEdit control"
FONT 8, "MS Sans Serif"
{
// CONTROL "", 100, "RichEdit20A", 4100 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 6, 12, 398, 163
 CONTROL "", 100, "RichEdit50W", 4100 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 6, 12, 398, 163
 PUSHBUTTON "&Load text file", 110, 5, 179, 50, 16
 CHECKBOX "Activate syntax highlight", 115, 65, 182, 92, 11, BS_AUTOCHECKBOX | WS_TABSTOP
 PUSHBUTTON "L&oad RTF file", 120, 162, 179, 50, 16
 PUSHBUTTON "&Save RTF file", 130, 226, 179, 50, 16
 PUSHBUTTON "&End", IDCANCEL, 290, 179, 50, 16
 PUSHBUTTON "&Print", 998, 354, 179, 50, 16
}
 
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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Quien me puede aclarar esta Duda.

Postby remtec » Mon Mar 11, 2019 9:32 pm

Hola Cristobal.

Muchas gracias por tu ayuda.

Use tu ejemplo, hice algunos ajustes en el ancho de la pagina, se logro imprimir, el problema es que solo obtengo 1 pagina, no logro que imprima las demás paginas, en mi caso, son 4 paginas.

Asi es que sigo luchando, cada vez con menos tiempo para la entrega.

Muchos Saludos.
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 47 guests