Yes, code is correct
When you retrieve from memo, not retrieve image, format and text ?
cLetter := oRsLetter:Fields("BODY"):Value
_ViewMemo( cMode, Substr(cName,1,30), oRsLetter, oButt3, @cRtPrompt, @cLetter, oFontB
//-----------------------------
Static FUNC _ViewMemo( cMODE, cTitle, oRsLetter, oButt3, cRtPrompt, cLetter, oFontb )
Local cRtf
cRtf := cLetter
IF cMODE = "E" .or. cMode = "A"
REDEFINE RICHEDIT5 oRtf VAR cRtf ID 130 of oUSERS //UPDATE
ELSE // view
REDEFINE RICHEDIT5 oRtf VAR cRtf ID 130 of oUSERS //READONLY //COLOR CLR_BLACK, 15987697 READONLY
oRtf:SetReadOnly( .T. )
ENDIF
oRtf:SetText( cRtf )
oRtf:bGotFocus = { || oRtf:SetSel( 0, 0 ) }
Rick Lipkin wrote:Cristabol
// RichText
#Include "FiveWin.ch"
#include "RichEdi5.ch"
//-------------------------------
Func Main()
Local cFile,aDir,dExe
Local nStart,cDefa,nYear
Local xProvider,xSource,cRdd
Local xConnect,oCn,cSql
Local catNewDB,oRsLetter,oErr
Local Saying
//-- get timestamp on .exe //
cFILE := GetModuleFileName( GetInstance() )
aDIR := DIRECTORY( cFILE )
dEXE := aDIR[1] [3]
// where .exe started from is default directory //
nSTART := RAT( "\", cFILE )
cDEFA := SUBSTR(cFILE,1,nSTART-1)
aDIR := NIL
SET DEFA to ( cDEFA )
SET DELETED on
SET CENTURY on
SET 3DLOOK on
nYEAR := ( year( DATE() )-30 )
SET EPOCH to ( nYEAR )
REQUEST DBFCDX
rddsetdefault ( "DBFCDX" )
xPROVIDER := "Microsoft.Jet.OLEDB.4.0"
xSOURCE := cDEFA+"\Rick.mdb"
cRDD := xPROVIDER+" -- "+xSOURCE
// global connection string
xCONNECT := 'Provider='+xPROVIDER+';Data Source='+xSOURCE
aDIR := DIRECTORY( cDEFA+"\MASTHEAD\*.*", "D" )
IF EMPTY( aDIR )
IF lMkDir( cDEFA+"\Masthead" )
ELSE
SAYING := "SORRY ... Could not make the directory "+CHR(10)
SAYING += cDEFA+"\Masthead needed to run this Application "+CHR(10)
SAYING += "Aborting"+CHR(10)
MsgInfo( SAYING )
RETURN(.F.)
ENDIF
ENDIF
aDir := NIL
If .not. File( cDefa+"\Rick.mdb" )
Ferase( cDefa+"\Rick.mdb" )
// create the adox object
Try
catNewDB := CreateObject("ADOX.Catalog")
Catch
MsgInfo( "Could not Create ADOX object")
Return(.f.)
End try
// create the table Rick.mdb
Try
catNewDB:Create('Provider='+xProvider+';Data Source='+xSource+';Jet OLEDB:Engine Type=5' )
Catch
MsgInfo( "Could not create the table "+xSource )
Return(.f.)
End Try
catNewDB:ActiveConnection:Close()
catNewDB := nil
Try
oCn := CREATEOBJECT( "ADODB.Connection" )
Catch
MsgInfo( "Could not create the ADO object for connection")
End Try
TRY
oCn:Open( xCONNECT )
CATCH oErr
MsgInfo( "Could not open a Connection to Database "+xSource )
RETURN(.F.)
END TRY
cSQL := "CREATE TABLE [Letter]"
cSQL += "( "
cSql += "[LetterEid] Integer NOT NULL, "
cSql += "[Title] char(100) NULL, "
cSql += "[Body] Text NULL, "
cSql += "[EntryBy] char(25) NULL, "
cSql += "[EntryDate] DateTime NULL, "
cSql += "[PicFileName] char(50) NULL, "
cSQL += "CONSTRAINT PK_LETTER PRIMARY KEY ( [LetterEid] )"
cSQL += " )"
Try
oCn:Execute( cSQL )
Catch
MsgInfo( "Table LETTER Failed" )
Return(.f.)
End try
oRsLetter := TOleAuto():New( "ADODB.Recordset" )
oRsLetter:CursorType := 1 // opendkeyset
oRsLetter:CursorLocation := 3 // local cache
oRsLetter:LockType := 3 // lockoportunistic
cSQL := "SELECT * FROM Letter"
TRY
oRsLetter:Open(cSQL,xConnect )
CATCH oErr
MsgInfo( "Error in Opening LETTER table" )
oCn:Close()
RETURN(.F.)
END TRY
oRsLetter:AddNew()
oRsLetter:Fields("LetterEid"):Value := 49491863
oRsLetter:Fields("Title"):Value := "We Have Moved "
oRsLetter:Fields("Body"):Value := ""
oRsLetter:Fields("EntryBy"):Value := "Donald Trump"
oRsLetter:Fields("EntryDate"):Value := Date()
oRsLetter:Fields("PicFileName"):Value := "49491863.PNG"
oRsLetter:Update()
oRsLetter:CLose()
oCn:Close()
oCn := nil
Endif
_LightGreyGrad()
// global connection string
xCONNECT := 'Provider='+xPROVIDER+';Data Source='+xSOURCE
oCn := nil
oCn := CREATEOBJECT( "ADODB.Connection" )
TRY
oCn:Open( xConnect )
CATCH oErr
Saying := "Could not open a Global Connection to Database "+xSource
MsgInfo( Saying )
RETURN(.F.)
END TRY
oRsLetter := TOleAuto():New( "ADODB.Recordset" )
oRsLetter:CursorType := 1 // opendkeyset
oRsLetter:CursorLocation := 3 // local cache
oRsLetter:LockType := 3 // lockoportunistic
cSQL := "SELECT * FROM Letter"
TRY
oRsLetter:Open(cSQL,xConnect )
CATCH oErr
MsgInfo( "Error in Opening LETTER table" )
RETURN(.F.)
END TRY
If oRsLetter:Eof
Saying := "Sorry .. there are No Records to View"
Msginfo( Saying )
oRsLetter:CLose()
Return(.t.)
Endif
_LettView( "E", oRsLetter )
oRsLetter:CLose()
Return(nil)
//----------------------
Static FUNC _LettView( cMODE,oRsLetter )
LOCAL SAYING, oDlg, lOK, oBmp
LOCAL lOK1,oButt1,oButt2,oButt3
Local cName,cLetter,dEntryDate,cEntryBy
Local oName,oLetter,oEntryDate,oEntryBy
Local cTitle
Local cSql,oErr
Local oSay1,oSay2,oSay3
Local oFontB,cRtPrompt
IF oRsLetter:EOF .and. ( cMODE = "E" .or. cMode = "V" )
SAYING := "SORRY ... Before you can EDIT or VIEW a record you have to ADD "
SAYING += "one First"
MsgInfo( SAYING )
RETURN(.F.)
ENDIF
_DarkGreyGrad()
oFontB := TFont():New("Ms Sans Serif",,-6,.F.,.T. ,,,,.F. )
IF cMODE = "A"
cName := space(100)
cLetter := ""
dEntryDate := Date()
cEntryBy := "HillaryC"
ELSE
cName := If(empty(oRsLetter:Fields("Title"):Value),space(100),;
oRsLetter:Fields("Title"):Value)
cLetter := oRsLetter:Fields("BODY"):Value
dEntryDate := If(empty(oRsLetter:Fields("EntryDate"):Value), ctod(""),;
_TtoDate(oRsLetter:Fields("EntryDate"):Value))
cEntryBy := If(empty(oRsLetter:Fields("EntryBy"):Value),space(25),;
substr(alltrim(oRsLetter:Fields("EntryBy"):Value)+space(25),1,25))
ENDIF
cTITLE := "Mail Merge Letter Information"
DO CASE
CASE cMODE = "A"
cTITLE := "Mail Merge Letter Information ADD"
CASE cMODE = "E"
cTITLE := "Mail Merge Letter Information EDIT"
CASE cMODE = "V"
cTITLE := "Mail Merge Letter Information VIEW"
ENDCASE
lOK := .F.
*DEFINE BITMAP oBmp RESOURCE "LETTVIEW"
DEFINE DIALOG oDlg RESOURCE "LETTVIEW" ;
TITLE cTITLE
REDEFINE SAY oSay1 ID 119 OF oDlg UPDATE // letter name
oSay1:SetFont( oFontB )
REDEFINE SAY oSay2 ID 122 OF oDlg UPDATE // associated letter
oSay2:SetFont( oFontB )
oSay2:SetColor(nRgb(7,7,224)) // blue
REDEFINE SAY oSay3 ID 126 OF oDlg UPDATE // last update
oSay3:SetFont( oFontB )
IF cMODE = "A" .or. cMODE = "E"
REDEFINE GET oName VAR cName ID 120 of oDlg UPDATE
ELSE // view
REDEFINE GET oName VAR cName ID 120 of oDlg COLOR CLR_BLACK, 15987697 READONLY
ENDIF
REDEFINE GET oEntryBy VAR cEntryBy ID 127 of oDlg COLOR CLR_BLACK, 15987697 READONLY
REDEFINE GET oEntryDate VAR dEntryDate ID 128 of oDlg COLOR CLR_BLACK, 15987697 READONLY
cRtPrompt := "Create Letter"
nLen := Len( cLetter )
Do Case
Case nLen = 0
cRtPrompt := "Create Letter"
Case nLen > 0
cRtPrompt := "View Letter"
End Case
REDEFINE BTNBMP oButt3 PROMPT cRtPrompt ID 123 of oDlg LEFT 2007 ; // letter
RESOURCE "LETTER32";
ACTION ( _ViewMemo( cMode, Substr(cName,1,30), oRsLetter, oButt3, @cRtPrompt, @cLetter, oFontB ));
GRADIENT _DarkGreyButtonGrad()
REDEFINE BTNBMP oButt1 ID 150 of oDlg ; // ok
RESOURCE "OK", "DOK", "DOK" ;
PROMPT "&Ok" LEFT 2007;
ACTION ( IF(cMODE = "V",lOK := .T. , lOK := _busrules( cMODE, cName,oName ) ), ;
IF(cMODE = "V",lOK := .T. , If(lOK = .T., _doit( cMODE,cName,cLetter,oRsLetter ),)),;
If(lOK = .T., oDlg:END(), ) )
REDEFINE BTNBMP oButt2 ID 160 of oDlg ; // cancel
RESOURCE "CANCEL", "DCANCEL", "DCANCEL" ;
PROMPT "&Cancel" LEFT 2007;
ACTION ( lOk := .f., oDlg:END())
ACTIVATE DIALOG oDlg ;
VALID (!GETKEYSTATE( 27 ))// ; // do not allow esc key here
* ON INIT( NIL ) ; // _Hidum( oSay2,oButt3,cInvoiceType));
* ON PAINT (PalBmpDraw( hDC, 0, 0, oBmp:hBitmap ))
_LightGreyGrad()
lOK1 := lOK
Release oFontB
*oBmp:End()
RETURN( lOK1 )
//---------------------------------
Static FUNC _DoIt( cMODE,cName,cLetter,oRsLetter )
LOCAL nEID,nEid1,nUpdated
IF cMODE = "V"
RETURN(.T.)
ENDIF
IF cMODE = "A"
nEid := _GenEid()
If nEid = -1
Saying := "Error in Creating Unique Row Id"
MsgInfo( Saying )
Return(.f.)
Endif
oRsLetter:AddNew()
oRsLetter:Fields("LetterEid"):Value := nEid
ENDIF
cName := _UpperLower(cName)
oRsLetter:Fields("Title"):Value := cName
*oRsLetter:Fields("Body"):Value := cLetter
oRsLetter:Fields("EntryBy"):Value := "Admin"
oRsLetter:Fields("EntryDate"):Value := Date()
oRsLetter:Update()
IF cMODE = "A"
oRsLetter:Sort( "Title" )
oRsLetter:MoveFirst()
oRsLetter:Find( "LetterEid = "+lTrim(Str(nEid)) )
ENDIF
RETURN(NIL)
//-------------------
Static Func _GenEid()
LOCAL nRAND
LOCAL oRs, cSQL, oERR
oRs:= TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := 1 // opendkeyset
oRs:CursorLocation := 3 // local cache
oRs:LockType := 3 // lockoportunistic
cSQL := "SELECT [LetterEid] from [Letter]"
TRY
oRs:Open( cSQL,xCONNECT )
CATCH oErr
MsgInfo( "Error in Opening LETTER table to Create Unique EID" )
RETURN(-1)
END TRY
DO WHILE .T.
nRAND := nRANDOM(100000000)
// 1 is reserved and 0 is a null key //
IF nRAND = 1 .or. nRAND = 0 .or. nRAND = NIL
LOOP
ENDIF
IF oRs:eof
ELSE
oRs:MoveFirst()
oRs:Find("LetterEid = "+ltrim(str(nRand)) )
ENDIF
IF oRs:eof
EXIT
ELSE
LOOP
ENDIF
EXIT
ENDDO
oRs:Close()
oRs := nil
RETURN( nRAND )
//-------------------------
*Static Func _Hidum( oSay2,oButt3,cInvoiceType)
*
*If UPPER( cInvoiceType ) = "RETURNS"
*Else
* oSay2:Hide()
* oButt3:Hide()
*Endif
*
*Return(.t.)
//---------------------------------
Static FUNC _BusRules( cMODE,cName,oName )
LOCAL SAYING
If cName = " "
SAYING := "SORRY .. LETTER Name is a Required Field"
MsgInfo( SAYING )
oName:SetFocus()
RETURN(.F.)
ENDIF
RETURN(.T.)
//-----------------------------
Static FUNC _ViewMemo( cMODE, cTitle, oRsLetter, oButt3, cRtPrompt, cLetter, oFontb )
Local SAYING, oUSERS
Local oRTF, cRTF, oBtn1,oBtn2,oBtn3
Local lOk,nLen,cOldMemo
Local oSay1,oSay2,xGrad
Lok := .f.
cOldMemo := cLetter
xGrad := { { .50, nRGB( 216, 216, 216 ), nRGB( 255, 255, 255 ) } }
If empty( cTitle )
cTitle := "Text Viewer"
Endif
Do Case
Case cMode = "E"
cTITLE := cTitle +" EDIT"
Case cMode = "A"
cTITLE := cTitle +" ADD"
Case cMode = "V"
cTITLE := cTitle +" VIEW"
EndCase
cRtf := cLetter
_LightGreyGrad()
*SetDlgGradient() // reset to blank
DEFINE DIALOG oUSERS RESOURCE "LETTER" ;
TITLE cTITLE ;
REDEFINE SAY oSay1 ID 125 OF oUsers UPDATE // double click
oSay1:SetFont( oFontB )
REDEFINE SAY oSay2 ID 126 OF oUsers UPDATE // double click
oSay2:SetFont( oFontB )
oSay2:SetColor( nRgb(7,7,224)) // blue
IF cMODE = "E" .or. cMode = "A"
REDEFINE RICHEDIT5 oRtf VAR cRtf ID 130 of oUSERS //UPDATE
ELSE // view
REDEFINE RICHEDIT5 oRtf VAR cRtf ID 130 of oUSERS //READONLY //COLOR CLR_BLACK, 15987697 READONLY
oRtf:SetReadOnly( .T. )
ENDIF
* oRTf:LoadRTF( cRtf )
oRtf:SetText( cRtf )
oRtf:bGotFocus = { || oRtf:SetSel( 0, 0 ) }
REDEFINE BTNBMP oBtn1 ID 111 of oUSERS ; // ok
RESOURCE "OK", "DOK", "DOK" ;
PROMPT "&Ok" LEFT 2007;
ACTION ( lOk := .t.,;
If( lOk = .t., (cLetter := oRtf:GetText(),oRsLetter:Fields("Body"):Value := cLetter,;
oRsLetter:Update()), ),;
If( lOk = .t., oUSERS:END(),) )
* If( lOk = .t., (cLetter := oRtf:SaveAsRTF(),oRsLetter:Fields("Body"):Value := cLetter,;
* oRsLetter:Update()), ),;
* If( lOk = .t., oUSERS:END(),) )
REDEFINE BTNBMP oBtn2 ID 112 of oUSERS ; // cancel
RESOURCE "CANCEL", "DCANCEL", "DCANCEL" ;
PROMPT "&Cancel" LEFT 2007;
ACTION (lOk := .f., oUSERS:END())
REDEFINE BTNBMP oBtn3 ID 113 of oUSERS ; // test print
RESOURCE "PRINT25" ;
PROMPT "Test"+CRLF+"Print" LEFT 2007;
ACTION ( oRtf:Preview( cRtf ) )
oUsers:bResized = { | nSizeType, nWidth, nHeight | _ResizeControls( nSizeType, nWidth, nHeight, oUsers )}
ACTIVATE DIALOG oUSERS ;
ON INIT ( oUsers:Move(100,250) );
ON PAINT ( GradientFill( hDC, 0, 0, oUsers:nHeight, oUsers:nWidth, xGrad, .T. )); // note GradientFill
VALID (!GETKEYSTATE( 27 )) ; // do not allow esc key here
If cMode = "V"
cLetter := cOldMemo
Endif
If lOk = .t.
nLen := Len( cLetter )
Do Case
Case nLen = 0
cRtPrompt := "Create Letter"
Case nLen > 0
cRtPrompt := "View Letter"
End Case
oButt3:cCAPTION := cRtPrompt
* oBtn3:SetColor( "R+/W*" )
oButt3:ReFresh()
ENdif
_LightGreyGrad()
RETURN( NIL )
//-------------------------
Static Func _ResizeControls( nSizeType, nWidth, nHeight, oUsers )
*xbrowse(oUsers:aControls)
// 185
if nSizeType = 0 //SIZE_MAXIMIZED //nWidth - 60 nHeight -30
oUsers:aControls[ 3 ]:SetSize( , nHeight -30 ) //txbrowse
endif
Return(nil)
//------------------
Static Func _LightGreyGrad()
SetDlgGradient( { { .50, nRGB( 216, 216, 216 ), nRGB( 255, 255, 255 ) } } )
Return(nil)
//--------------------
Static Func _DarkGreyGrad()
SetDlgGradient( { { 0.87, 16777215, 11513775 },{ 0.87,11513775, 16777215 }})
Return(nil)
//-------------------------------
Static Func _TtoDate( tDate )
If empty( tDate)
Return( ctod("00/00/00"))
Endif
If ValType( tDate ) = "D"
Return(tDate )
Endif
Return( stod( substr( ttos( tDate ), 1, 8 ) ))
//-------------------
Static Func _DarkGreyButtonGrad()
// 2010 grey button skin
Local bGrad
bGrad := { | lInvert | If( ! lInvert, ;
{ { 1, nRGB( 255, 255, 255 ), nRGB( 64, 64, 64 ) } }, ;
{ { 1/3, nRGB( 255, 253, 222 ), nRGB( 255, 231, 151 ) }, ;
{ 2/3, nRGB( 255, 215, 84 ), nRGB( 255, 233, 162 ) } } ) }
Return( bGrad )
//------------------
Func _UpperLower( cText )
Local nLen,i,cField
nLen := len( cText )
For i = 1 to Len(cText)
If i = 1
cField := upper(substr(cText,i,1))
Loop
Endif
// check for multiple words
// use space as the delimeter
If substr(cText,i,1) = space(1) // found a space in between words
i++
cField := cField+" "+upper(substr(cText,i,1))
loop
Else
cField := cField+lower(substr(cText,i,1))
Endif
Next
cText := cField
Return(cText)
// End Main.prg
// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
//#include "resource.h"
//#define WC_STATIC L"Static"
//#define MONTHCAL_CLASS "SysMonthCal32"
//#define DATETIMEPICK_CLASS "SysDateTimePick32"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
LETTER DIALOG 13, 35, 455, 303
STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_THICKFRAME | WS_SYSMENU
FONT 6, "MS Sans Serif"
{
CONTROL "", 130, "RichEdit50W", 0x50A11004, 53, 8, 394, 285, 0x00000000
CONTROL "Ok", 111, "TBtnBmp", 0x50010020, 5, 236, 41, 25, 0x00000000
CONTROL "Cancel", 112, "TBtnBmp", 0x50010020, 5, 266, 41, 25, 0x00000000
CONTROL "Test Print", 113, "TBtnBmp", 0x50010020, 5, 119, 41, 40, 0x00000000
LTEXT "Text", 125, 4, 15, 41, 12, SS_LEFT | SS_NOPREFIX, WS_EX_LEFT
LTEXT "Right Click to bring up additional Menu Options", 126, 4, 44, 41, 55, SS_LEFT | SS_NOPREFIX, WS_EX_LEFT
}
// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
//#include "resource.h"
//#define WC_STATIC L"Static"
//#define MONTHCAL_CLASS "SysMonthCal32"
//#define DATETIMEPICK_CLASS "SysDateTimePick32"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
LETTVIEW DIALOG 110, 125, 306, 173
STYLE DS_SETFONT | WS_CAPTION | WS_POPUP
FONT 6, "MS Sans Serif"
{
EDITTEXT 120, 3, 50, 230, 12, ES_AUTOHSCROLL, WS_EX_LEFT
CONTROL "&Ok", 150, "TBtnBmp", 0x50010020, 202, 115, 41, 25, 0x00000000
CONTROL "&Cancel", 160, "TBtnBmp", 0x50010020, 247, 115, 41, 25, 0x00000000
EDITTEXT 127, 6, 113, 65, 12, WS_DISABLED | NOT WS_TABSTOP, WS_EX_LEFT
EDITTEXT 128, 6, 128, 65, 12, WS_DISABLED | NOT WS_TABSTOP, WS_EX_LEFT
LTEXT "Letter Name", 119, 6, 35, 61, 12, SS_LEFT | SS_NOPREFIX, WS_EX_LEFT
LTEXT "Last Update", 126, 6, 99, 58, 12, SS_LEFT | SS_NOPREFIX, WS_EX_LEFT
LTEXT "Associated Mail Merge Letter", 122, 136, 71, 57, 32, SS_LEFT | SS_NOPREFIX, WS_EX_LEFT
CONTROL "Letter", 123, "TBtnBmp", 0x50010020, 202, 71, 85, 34, 0x00000000
}
//oRTf:LoadRTF( cRtf )
//oRtf:SetText( cRtf ) <-- rem out
oRtf:bGotFocus = { || oRtf:SetSel( 0, 0 ) }
REDEFINE BTNBMP oBtn1 ID 111 of oUSERS ; // ok
RESOURCE "OK", "DOK", "DOK" ;
PROMPT "&Ok" LEFT 2007;
ACTION ( lOk := .t.,;
If( lOk = .t., (cLetter := oRtf:SaveAsRTF(),oRsLetter:Fields("Body"):Value := cLetter,; // made change here as well
oRsLetter:Update()), ),;
If( lOk = .t., oUSERS:END(),) )
METHOD Preview( cName ) CLASS TRichEdit5
local aMargins := PageGetMargins()
local nLen := ::Len()
local nPrint := 0
local oPrn
//local aPrinters := aGetPrinters()
DEFAULT cName := cFileNoExt( ::cFileName ) + " Report" //"FWH RichEdit Report"
PRINT oPrn NAME cName PREVIEW MODAL // add MODAL here
if Empty( oPrn:hDC )
MsgStop( "Printer not ready!" )
return nil
endif
CursorWait()
AEval( aMargins, { | x, y | aMargins[ y ] := x * 1440 / 2540 } )
do while nPrint < nLen
PAGE
nPrint := REPreview5( ::hWnd, oPrn:hDC, oPrn:hDCOut, aMargins, nPrint )
ENDPAGE
enddo
CursorArrow()
ENDPRINT
return nil
METHOD Preview( cName, lModal ) CLASS TRichEdit5
local aMargins := PageGetMargins()
local nLen := ::Len()
local nPrint := 0
local oPrn
//local aPrinters := aGetPrinters()
DEFAULT cName := cFileNoExt( ::cFileName ) + " Report" //"FWH RichEdit Report"
DEFAULT lModal := .F.
if lModal
PRINT oPrn NAME cName PREVIEW MODAL
else
PRINT oPrn NAME cName PREVIEW
endif
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: No registered users and 112 guests