2010-01-19 23:12 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbwin/win_tprn.prg
  * contrib/hbwin/win_prn1.c
    + WIN_CREATEFONT() extended with 10th parameter which makes
      it possible to switch to raw height/width specification.
      This is crucial for precise positioning using integer
      parameters. Not very elegant parameter, but this class
      and low-level interface is already extremely hacky so this
      won't really make it any worse.
    + WIN_PRN():SetFont() extended with lManualSize option which
      maps to above 10th parameter.

  * contrib/hbwin/tests/testprn.prg
    + Added some text on the solution for overwritten underline
      problem described in test program.
This commit is contained in:
Viktor Szakats
2010-01-19 22:19:54 +00:00
parent 7bbd7b0092
commit b06c2e6d81
4 changed files with 40 additions and 12 deletions

View File

@@ -17,6 +17,22 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-01-19 23:12 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbwin/win_tprn.prg
* contrib/hbwin/win_prn1.c
+ WIN_CREATEFONT() extended with 10th parameter which makes
it possible to switch to raw height/width specification.
This is crucial for precise positioning using integer
parameters. Not very elegant parameter, but this class
and low-level interface is already extremely hacky so this
won't really make it any worse.
+ WIN_PRN():SetFont() extended with lManualSize option which
maps to above 10th parameter.
* contrib/hbwin/tests/testprn.prg
+ Added some text on the solution for overwritten underline
problem described in test program.
2010-01-19 21:55 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/gtwvg/wvgdarea.prg
! Deleted method declaration without definition.

View File

@@ -107,9 +107,9 @@ STATIC PROCEDURE PrnTest( cPrinter, cBMPFile, lAsk )
oPrinter:SetPrc( oPrinter:Prow() + 3, 0 )
oPrinter:Bold( WIN_FW_DONTCARE )
oPrinter:TextOut( "Notice: UNDERLINE only prints correctly if there is a blank line after", .T. )
oPrinter:TextOut( " it. This is because of ::LineHeight and the next line", .T. )
oPrinter:TextOut( " it. This is because of :LineHeight and the next line", .T. )
oPrinter:TextOut( " printing over top of the underline. To avoid this happening", .T. )
oPrinter:TextOut( " you can to alter ::LineHeight or use a smaller font" )
oPrinter:TextOut( " you can to alter :LineHeight or use a smaller font, or use :SetBkMode( WIN_TRANSPARENT )" )
oPrinter:NewLine()
oPrinter:NewLine()
oPrinter:SetFont( "Lucida Console", 18, 0 ) // Large print

View File

@@ -419,18 +419,29 @@ HB_FUNC( WIN_CREATEFONT )
{
HFONT hFont;
void * hFontFace;
int iHeight = hb_parni( 3 );
int iMul = hb_parni( 4 );
int iDiv = hb_parni( 5 );
int iHeight;
int iWidth;
int iWeight = hb_parni( 6 );
iWeight = iWeight > 0 ? iWeight : FW_NORMAL;
iHeight = -MulDiv( iHeight, GetDeviceCaps( hDC, LOGPIXELSY ), 72 );
if( iDiv )
iWidth = MulDiv( abs( iMul ), GetDeviceCaps( hDC, LOGPIXELSX ), abs( iDiv ) );
if( hb_parl( 10 ) ) /* Ugly hack to enable full control for caller */
{
iHeight = hb_parni( 3 );
iWidth = hb_parni( 5 );
}
else
iWidth = 0; /* Use the default font width */
{
int iMul = hb_parni( 4 );
int iDiv = hb_parni( 5 );
iHeight = -MulDiv( hb_parni( 3 ), GetDeviceCaps( hDC, LOGPIXELSY ), 72 );
if( iDiv )
iWidth = MulDiv( abs( iMul ), GetDeviceCaps( hDC, LOGPIXELSX ), abs( iDiv ) );
else
iWidth = 0; /* Use the default font width */
}
hFont = CreateFont( iHeight,
iWidth,

View File

@@ -89,7 +89,7 @@ CREATE CLASS WIN_PRN
METHOD NewPage( lDelay ) // If lDelay == .T. then new page is not created immediately but just before 1-st output
METHOD CheckPage()
METHOD GetDocumentProperties()
METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet )
METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet, lManualSize )
// NB: xWidth is in "CharactersPerInch"
// _OR_ { nMul, nDiv } which equates to "CharactersPerInch"
// _OR_ ZERO ( 0 ) which uses the default width of the font
@@ -371,6 +371,7 @@ METHOD StartPage() CLASS WIN_PRN
lChangeDP := .T.
ENDIF
IF lChangeDP
HB_TRACELOG( "setdoc", nLFormType )
win_SetDocumentProperties( ::hPrinterDC, ::PrinterName, ;
nLFormType, lLLandscape, , ;
nLBinNumber, nLDuplexType, nLPrintQuality, ;
@@ -441,7 +442,7 @@ METHOD GetDocumentProperties() CLASS WIN_PRN
// An array {nMul,nDiv} is used to get precise size such a the Dot Matric equivalent
// of Compressed print == 16.67 char per inch == { 3,-50 }
// If nDiv is < 0 then Fixed width printing is forced via ExtTextOut()
METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet ) CLASS WIN_PRN
METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet, lManualSize ) CLASS WIN_PRN
LOCAL cType
IF cFontName != NIL
::FontName := cFontName
@@ -471,7 +472,7 @@ METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nChar
IF nCharSet != NIL
::fCharSet := nCharSet
ENDIF
IF ( ::SetFontOk := ! Empty( ::hFont := win_CreateFont( ::hPrinterDC, ::FontName, ::FontPointSize, ::FontWidth[ 1 ], ::FontWidth[ 2 ], ::fBold, ::fUnderLine, ::fItalic, ::fCharSet ) ) )
IF ( ::SetFontOk := ! Empty( ::hFont := win_CreateFont( ::hPrinterDC, ::FontName, ::FontPointSize, ::FontWidth[ 1 ], ::FontWidth[ 2 ], ::fBold, ::fUnderLine, ::fItalic, ::fCharSet, lManualSize ) ) )
::fCharWidth := ::GetCharWidth()
::CharWidth := Abs( ::fCharWidth )
::CharHeight := ::GetCharHeight()