Necesito solucionar el problema de imprimir campo memo FPT guardado con Richedit5.
Cristobal Navarro, me proporciono el código que muestro mas abajo, funciona para imprimir solo una página, pero los texto que guardo son texto enriquecido y que pueden llegar a tener 4 páginas, por lo que me es Urgente lograr que este codigo me permita imprimir la totalidad del texto en forma directa, no pasando por Word.
En espera como siempre de su ayuda, les saluda muy atte.
Antonio.
Código que Imprime solo una pagina del Texto:
- Code: Select all Expand view
#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
//----------------------------------------------------------------------------//