From 522ef1a52c2bbe28cd621c59edbf5d1ac2ff16e5 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 21 Nov 2009 21:38:39 +0000 Subject: [PATCH] 2009-11-21 22:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbwin/win_tprn.prg * contrib/hbwin/win_prn1.c + Added ::GetDocumentProperties() method. + Calling ::GetDocumentProperties() from ::New() to setup defaults. ; Patch submitted by Xavi. Thank you. * contrib/hbwin/win_prn2.c % Modified GETPRINTERS() code to use optimal array creation code, use less redundancy and synced functionally similar code parts with each other, deleted unnecessary code parts. * Greatly cleaned GETPRINTERS() code (names, layout). ! Fixed GETPRINTERS() code. It had fatal flaw in non-NT branch, so I seriously wonder how could it work for anyone in the past. It seems it wasn't even tested by submitter before commited to xhb repository in year 2005. Someone pls test it on Win9x, I don't have any printers installed there. * contrib/hbwin/win_prn1.c * contrib/hbwin/legacy.prg * Moved WIN_GETEXEFILENAME() to legacy function collection, at the same time rewritten to simply call HB_ARGV( 0 ). * contrib/hbwin/win_prn1.c % WIN_FILLRECT(), WIN_ARC(), WIN_ELLIPSE() optimized. --- harbour/ChangeLog | 27 +++ harbour/contrib/hbwin/legacy.prg | 3 + harbour/contrib/hbwin/win_prn1.c | 90 ++++++---- harbour/contrib/hbwin/win_prn2.c | 261 +++++++++++------------------ harbour/contrib/hbwin/win_tprn.prg | 2 + 5 files changed, 193 insertions(+), 190 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0425d3959c..b08dfc7cfc 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,33 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-11-21 22:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbwin/win_tprn.prg + * contrib/hbwin/win_prn1.c + + Added ::GetDocumentProperties() method. + + Calling ::GetDocumentProperties() from ::New() to setup defaults. + ; Patch submitted by Xavi. Thank you. + + * contrib/hbwin/win_prn2.c + % Modified GETPRINTERS() code to use optimal array creation code, + use less redundancy and synced functionally similar code + parts with each other, deleted unnecessary code parts. + * Greatly cleaned GETPRINTERS() code (names, layout). + ! Fixed GETPRINTERS() code. It had fatal flaw in non-NT + branch, so I seriously wonder how could it work for anyone + in the past. It seems it wasn't even tested by submitter + before commited to xhb repository in year 2005. + Someone pls test it on Win9x, I don't have any printers + installed there. + + * contrib/hbwin/win_prn1.c + * contrib/hbwin/legacy.prg + * Moved WIN_GETEXEFILENAME() to legacy function collection, + at the same time rewritten to simply call HB_ARGV( 0 ). + + * contrib/hbwin/win_prn1.c + % WIN_FILLRECT(), WIN_ARC(), WIN_ELLIPSE() optimized. + 2009-11-21 20:28 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * config/darwin/gcc.mk * config/darwin/icc.mk diff --git a/harbour/contrib/hbwin/legacy.prg b/harbour/contrib/hbwin/legacy.prg index 0fb772bd0c..3873bf9855 100644 --- a/harbour/contrib/hbwin/legacy.prg +++ b/harbour/contrib/hbwin/legacy.prg @@ -342,6 +342,9 @@ METHOD OleValueNotEqual( xArg ) CLASS TOLEAUTO FUNCTION CreateOLEObject( ... ) RETURN __OleCreateObject( ... ) +FUNCTION win_GetExeFileName() + RETURN hb_ArgV( 0 ) + CREATE CLASS Win32Prn FROM WIN_PRN ENDCLASS diff --git a/harbour/contrib/hbwin/win_prn1.c b/harbour/contrib/hbwin/win_prn1.c index 4a4e2d9997..e19861d70e 100644 --- a/harbour/contrib/hbwin/win_prn1.c +++ b/harbour/contrib/hbwin/win_prn1.c @@ -470,6 +470,47 @@ HB_FUNC( WIN_SETDOCUMENTPROPERTIES ) hb_retl( Result ); } +HB_FUNC( WIN_GETDOCUMENTPROPERTIES ) +{ + BOOL Result = FALSE; + HANDLE hPrinter; + const char * pszPrinterName = hb_parc( 1 ); + LPTSTR lpPrinterName = pszPrinterName ? HB_TCHAR_CONVTO( pszPrinterName ) : NULL; + + if( OpenPrinter( lpPrinterName, &hPrinter, NULL ) ) + { + PDEVMODE pDevMode = NULL; + LONG lSize = DocumentProperties( 0, hPrinter, lpPrinterName, pDevMode, pDevMode, 0 ); + + if( lSize > 0 ) + { + pDevMode = ( PDEVMODE ) hb_xgrab( lSize ); + + if( pDevMode ) + { + DocumentProperties( 0, hPrinter, lpPrinterName, pDevMode, pDevMode, DM_OUT_BUFFER ); + + hb_stornl( pDevMode->dmPaperSize, 2 ); + hb_storl( pDevMode->dmOrientation == 2, 3 ); + hb_stornl( pDevMode->dmCopies, 4 ); + hb_stornl( pDevMode->dmDefaultSource, 5 ); + hb_stornl( pDevMode->dmDuplex, 6 ); + hb_stornl( pDevMode->dmPrintQuality, 7 ); + Result = TRUE; + + hb_xfree( pDevMode ); + } + } + + ClosePrinter( hPrinter ); + } + + if( lpPrinterName ) + HB_TCHAR_FREE( lpPrinterName ); + + hb_retl( Result ); +} + /* Functions for Loading & Printing bitmaps */ HB_FUNC( WIN_LOADBITMAPFILE ) @@ -582,15 +623,6 @@ HB_FUNC( WIN_ENUMFONTS ) } } -HB_FUNC( WIN_GETEXEFILENAME ) -{ - unsigned char pBuf[ 1024 ]; - - GetModuleFileName( NULL, ( LPTSTR ) pBuf, 1023 ); - - hb_retc( ( char * ) pBuf ); -} - HB_FUNC( WIN_SETCOLOR ) { HDC hDC = win_HDC_par( 1 ); @@ -627,17 +659,13 @@ HB_FUNC( WIN_SETPEN ) HB_FUNC( WIN_FILLRECT ) { HDC hDC = win_HDC_par( 1 ); - int x1 = hb_parni( 2 ); - int y1 = hb_parni( 3 ); - int x2 = hb_parni( 4 ); - int y2 = hb_parni( 5 ); HBRUSH hBrush = CreateSolidBrush( ( COLORREF ) hb_parnl( 6 ) ); RECT rct; - rct.top = y1; - rct.left = x1; - rct.bottom = y2; - rct.right = x2; + rct.left = hb_parni( 2 ); + rct.top = hb_parni( 3 ); + rct.right = hb_parni( 4 ); + rct.bottom = hb_parni( 5 ); FillRect( hDC, &rct, hBrush ); @@ -675,24 +703,24 @@ HB_FUNC( WIN_RECTANGLE ) HB_FUNC( WIN_ARC ) { - HDC hDC = win_HDC_par( 1 ); - int x1 = hb_parni( 2 ); - int y1 = hb_parni( 3 ); - int x2 = hb_parni( 4 ); - int y2 = hb_parni( 5 ); - - hb_retl( Arc( hDC, x1, y1, x2, y2, 0, 0, 0, 0 ) ); + hb_retl( Arc( win_HDC_par( 1 ) /* hDC */, + hb_parni( 2 ) /* x1 */, + hb_parni( 3 ) /* y1 */, + hb_parni( 4 ) /* x2 */, + hb_parni( 5 ) /* y2 */, + 0, + 0, + 0, + 0 ) ); } HB_FUNC( WIN_ELLIPSE ) { - HDC hDC = win_HDC_par( 1 ); - int x1 = hb_parni( 2 ); - int y1 = hb_parni( 3 ); - int x2 = hb_parni( 4 ); - int y2 = hb_parni( 5 ); - - hb_retl( Ellipse( hDC, x1, y1, x2, y2 ) ); + hb_retl( Ellipse( win_HDC_par( 1 ) /* hDC */, + hb_parni( 2 ) /* x1 */, + hb_parni( 3 ) /* y1 */, + hb_parni( 4 ) /* x2 */, + hb_parni( 5 ) /* y2 */ ) ); } HB_FUNC( WIN_SETBKMODE ) diff --git a/harbour/contrib/hbwin/win_prn2.c b/harbour/contrib/hbwin/win_prn2.c index 128ab52d4b..2484a1fda8 100644 --- a/harbour/contrib/hbwin/win_prn2.c +++ b/harbour/contrib/hbwin/win_prn2.c @@ -104,12 +104,11 @@ BOOL hb_PrinterExists( LPCSTR pPrinterName ) pPrinterEnum4 = buffer4 = ( PRINTER_INFO_4 * ) hb_xgrab( needed ); - if( EnumPrinters - ( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) ) + if( EnumPrinters( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) ) { ULONG a; - for( a = 0; !Result && a < returned; a++, pPrinterEnum4++ ) + for( a = 0; ! Result && a < returned; ++a, pPrinterEnum4++ ) { Result = strcmp( ( const char * ) pPrinterName, ( const char * ) pPrinterEnum4->pPrinterName ) == 0; @@ -358,11 +357,12 @@ HB_FUNC( XISPRINTER ) DWORD pdwBufferSize = sizeof( szDefaultPrinter ); const char * pszPrinterName = hb_parc( 1 ); - if( !pszPrinterName ) + if( ! pszPrinterName ) { hb_GetDefaultPrinter( szDefaultPrinter, &pdwBufferSize ); pszPrinterName = szDefaultPrinter; } + hb_retnl( hb_printerIsReadyn( pszPrinterName ) ); } @@ -386,7 +386,7 @@ BOOL hb_GetPrinterNameByPort( char * pPrinterName, LPDWORD pdwBufferSize, { ULONG a; - for( a = 0; a < returned && !bFound; a++, pPrinterEnum++ ) + for( a = 0; a < returned && ! bFound; ++a, ++pPrinterEnum ) { char * szPortName = HB_TCHAR_CONVFROM( pPrinterEnum->pPortName ); @@ -430,10 +430,10 @@ HB_FUNC( PRINTERPORTTONAME ) # define BIG_PRINT_BUFFER (1024*32) -LONG hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const char * cDocName ) +long hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const char * cDocName ) { HANDLE hPrinter; - LONG Result; + long Result; LPTSTR lpPrinterName = HB_TCHAR_CONVTO( cPrinterName ); if( OpenPrinter( lpPrinterName, &hPrinter, NULL ) != 0 ) @@ -493,7 +493,7 @@ LONG hb_PrintFileRaw( const char * cPrinterName, const char * cFileName, const c HB_FUNC( PRINTFILERAW ) { - LONG Result = -1; + long Result = -1; if( HB_ISCHAR( 1 ) && HB_ISCHAR( 2 ) ) Result = hb_PrintFileRaw( hb_parc( 1 ) /* cPrinterName */, @@ -503,111 +503,90 @@ HB_FUNC( PRINTFILERAW ) hb_retnl( Result ); } +#define HB_WINPRN_NAME 1 +#define HB_WINPRN_PORT 2 +#define HB_WINPRN_TYPE 3 +#define HB_WINPRN_DRIVER 4 +#define HB_WINPRN_LEN_ 4 + HB_FUNC( GETPRINTERS ) { HANDLE hPrinter; DWORD Flags = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS; - BOOL bPrinterNamesOnly = TRUE; - BOOL bLocalPrintersOnly; - PRINTER_INFO_4 * buffer4, * pPrinterEnum4; - PRINTER_INFO_5 * buffer, * pPrinterEnum; - PRINTER_INFO_2 * pPrinterInfo2; + BOOL bPrinterNamesOnly = HB_ISLOG( 1 ) ? ! hb_parl( 1 ) : TRUE; + BOOL bLocalPrintersOnly = hb_parl( 2 ); ULONG needed = 0, returned = 0, a; - PHB_ITEM SubItems, File, Port, Net, Driver, ArrayPrinter; + PHB_ITEM SubItems = hb_itemNew( NULL ); + PHB_ITEM pPrinterName = hb_itemNew( NULL ); + PHB_ITEM ArrayPrinter = hb_itemNew( NULL ); char * pszData; - ArrayPrinter = hb_itemNew( NULL ); - SubItems = hb_itemNew( NULL ); - File = hb_itemNew( NULL ); - Port = hb_itemNew( NULL ); - Net = hb_itemNew( NULL ); - Driver = hb_itemNew( NULL ); - hb_arrayNew( ArrayPrinter, 0 ); - buffer = NULL; - HB_TRACE( HB_TR_DEBUG, ( "GETPRINTERS()" ) ); + EnumPrinters( Flags, NULL, 4, ( LPBYTE ) NULL, 0, &needed, &returned ); - if( HB_ISLOG( 1 ) ) - bPrinterNamesOnly = ! hb_parl( 1 ); - - bLocalPrintersOnly = hb_parl( 2 ); - - if( hb_iswinnt() ) + if( needed ) { - EnumPrinters( Flags, NULL, 4, ( LPBYTE ) NULL, 0, &needed, &returned ); - - if( needed ) + if( hb_iswinnt() ) { - pPrinterEnum4 = buffer4 = ( PRINTER_INFO_4 * ) hb_xgrab( needed ); + PRINTER_INFO_4 * pPrinterEnumBak; + PRINTER_INFO_4 * pPrinterEnum = pPrinterEnumBak = ( PRINTER_INFO_4 * ) hb_xgrab( needed ); - if( EnumPrinters - ( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum4, needed, &needed, &returned ) ) + if( EnumPrinters( Flags, NULL, 4, ( LPBYTE ) pPrinterEnum, needed, &needed, &returned ) ) { - if( bPrinterNamesOnly ) + for( a = 0; a < returned; ++a, ++pPrinterEnum ) { - for( a = 0; a < returned; a++, pPrinterEnum4++ ) + if( ! bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) { - if( ! bLocalPrintersOnly - || pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + if( bPrinterNamesOnly ) { - pszData = HB_TCHAR_CONVFROM( pPrinterEnum4->pPrinterName ); - hb_itemPutC( File, pszData ); + pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName ); + hb_itemPutC( pPrinterName, pszData ); HB_TCHAR_FREE( pszData ); - hb_arrayAddForward( ArrayPrinter, File ); + hb_arrayAddForward( ArrayPrinter, pPrinterName ); } - } - } - else - { - for( a = 0; a < returned; a++, pPrinterEnum4++ ) - { - if( ! bLocalPrintersOnly - || pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + else { - if( OpenPrinter( pPrinterEnum4->pPrinterName, &hPrinter, NULL ) ) + if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) ) { GetPrinter( hPrinter, 2, NULL, 0, &needed ); if( needed ) { - pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed ); - if( pPrinterInfo2 ) + hb_arrayNew( SubItems, HB_WINPRN_LEN_ ); + + pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName ); + hb_arraySetC( SubItems, HB_WINPRN_NAME, pszData ); + HB_TCHAR_FREE( pszData ); + { - pszData = HB_TCHAR_CONVFROM( pPrinterEnum4->pPrinterName ); - hb_itemPutC( File, pszData ); - HB_TCHAR_FREE( pszData ); - - hb_arrayNew( SubItems, 0 ); + PRINTER_INFO_2 * pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed ); if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) ) { pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName ); - hb_itemPutC( Port, pszData ); + hb_arraySetC( SubItems, HB_WINPRN_PORT, pszData ); HB_TCHAR_FREE( pszData ); pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName ); - hb_itemPutC( Driver, pszData ); + hb_arraySetC( SubItems, HB_WINPRN_DRIVER, pszData ); HB_TCHAR_FREE( pszData ); } else { - hb_itemPutC( Port, "Error" ); - hb_itemPutC( Driver, "Error" ); + hb_arraySetC( SubItems, HB_WINPRN_PORT, "Error" ); + hb_arraySetC( SubItems, HB_WINPRN_DRIVER, "Error" ); } - - if( pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_LOCAL ) - hb_itemPutC( Net, "LOCAL" ); - else if( pPrinterEnum4->Attributes & PRINTER_ATTRIBUTE_NETWORK ) - hb_itemPutC( Net, "NETWORK" ); - else - hb_itemPutC( Net, "ERROR" ); - - hb_arrayAddForward( SubItems, File ); - hb_arrayAddForward( SubItems, Port ); - hb_arrayAddForward( SubItems, Net ); - hb_arrayAddForward( SubItems, Driver ); - hb_arrayAddForward( ArrayPrinter, SubItems ); + hb_xfree( pPrinterInfo2 ); } + + if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "LOCAL" ); + else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK ) + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "NETWORK" ); + else + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "ERROR" ); + + hb_arrayAddForward( ArrayPrinter, SubItems ); } } CloseHandle( hPrinter ); @@ -615,118 +594,82 @@ HB_FUNC( GETPRINTERS ) } } } - hb_xfree( buffer4 ); + hb_xfree( pPrinterEnumBak ); } - } - else - { - EnumPrinters( Flags, NULL, 5, ( LPBYTE ) buffer, 0, &needed, &returned ); - - if( needed ) + else { - pPrinterEnum = buffer = ( PRINTER_INFO_5 * ) hb_xgrab( needed ); - - if( EnumPrinters( Flags, NULL, 5, ( LPBYTE ) buffer, needed, &needed, &returned ) ) + PRINTER_INFO_5 * pPrinterEnumBak; + PRINTER_INFO_5 * pPrinterEnum = pPrinterEnumBak = ( PRINTER_INFO_5 * ) hb_xgrab( needed ); + + if( EnumPrinters( Flags, NULL, 5, ( LPBYTE ) pPrinterEnum, needed, &needed, &returned ) ) { - for( a = 0; a < returned; a++, pPrinterEnum++ ) + for( a = 0; a < returned; ++a, ++pPrinterEnum ) { - if( !bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + if( ! bLocalPrintersOnly || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) { if( bPrinterNamesOnly ) { pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName ); - hb_itemPutC( File, pszData ); + hb_itemPutC( pPrinterName, pszData ); HB_TCHAR_FREE( pszData ); - hb_arrayAddForward( ArrayPrinter, File ); + hb_arrayAddForward( ArrayPrinter, pPrinterName ); } else { - /* Tony (ABC) 11/1/2005 1:40PM. */ - for( a = 0; a < returned; a++, pPrinterEnum++ ) + if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) ) { - if( ! bLocalPrintersOnly - || pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + GetPrinter( hPrinter, 2, NULL, 0, &needed ); + if( needed ) { - if( OpenPrinter( pPrinterEnum->pPrinterName, &hPrinter, NULL ) ) + hb_arrayNew( SubItems, HB_WINPRN_LEN_ ); + + pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName ); + hb_arraySetC( SubItems, HB_WINPRN_NAME, pszData ); + HB_TCHAR_FREE( pszData ); + { - GetPrinter( hPrinter, 2, NULL, 0, &needed ); - if( needed ) + PRINTER_INFO_2 * pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed ); + + if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) ) { - pPrinterInfo2 = ( PRINTER_INFO_2 * ) hb_xgrab( needed ); - if( pPrinterInfo2 ) - { - hb_arrayNew( SubItems, 0 ); - pszData = HB_TCHAR_CONVFROM( pPrinterEnum->pPrinterName ); - hb_itemPutC( File, pszData ); - HB_TCHAR_FREE( pszData ); - - if( GetPrinter( hPrinter, 2, ( LPBYTE ) pPrinterInfo2, needed, &needed ) ) - { - pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName ); - hb_itemPutC( Port, pszData ); - HB_TCHAR_FREE( pszData ); - pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName ); - hb_itemPutC( Driver, pszData ); - HB_TCHAR_FREE( pszData ); - } - else - { - hb_itemPutC( Port, "Error" ); - hb_itemPutC( Driver, "Error" ); - } - - if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) - hb_itemPutC( Net, "LOCAL" ); - else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK ) - hb_itemPutC( Net, "NETWORK" ); - else - hb_itemPutC( Net, "ERROR" ); - - hb_arrayAddForward( SubItems, File ); - hb_arrayAddForward( SubItems, Port ); - hb_arrayAddForward( SubItems, Net ); - hb_arrayAddForward( SubItems, Driver ); - hb_arrayAddForward( ArrayPrinter, SubItems ); - hb_xfree( pPrinterInfo2 ); - } + pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pPortName ); + hb_arraySetC( SubItems, HB_WINPRN_PORT, pszData ); + HB_TCHAR_FREE( pszData ); + pszData = HB_TCHAR_CONVFROM( pPrinterInfo2->pDriverName ); + hb_arraySetC( SubItems, HB_WINPRN_DRIVER, pszData ); + HB_TCHAR_FREE( pszData ); } + else + { + hb_arraySetC( SubItems, HB_WINPRN_PORT, "Error" ); + hb_arraySetC( SubItems, HB_WINPRN_DRIVER, "Error" ); + } + + hb_xfree( pPrinterInfo2 ); } - CloseHandle( hPrinter ); + + if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL ) + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "LOCAL" ); + else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK ) + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "NETWORK" ); + else + hb_arraySetC( SubItems, HB_WINPRN_TYPE, "ERROR" ); + + hb_arrayAddForward( ArrayPrinter, SubItems ); } } - /* Tony (ABC) 11/1/2005 1:40PM. Old Code... Justo in case. */ -#if 0 - hb_arrayNew( SubItems, 0 ); - hb_itemPutC( File, pPrinterEnum->pPrinterName ); - hb_itemPutC( Port, pPrinterEnum->pPortName ); - - if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_LOCAL) - hb_itemPutC( Net,"LOCAL" ); - else if( pPrinterEnum->Attributes & PRINTER_ATTRIBUTE_NETWORK) - hb_itemPutC( Net, "NETWORK" ); - else - hb_itemPutC( Net, "ERROR" ); - - hb_arrayAddForward( SubItems, File ); - hb_arrayAddForward( SubItems, Port ); - hb_arrayAddForward( SubItems, Net ); - hb_arrayAddForward( ArrayPrinter, SubItems ); -#endif + CloseHandle( hPrinter ); } } } } - hb_xfree( buffer ); + hb_xfree( pPrinterEnumBak ); } } - hb_itemReturnForward( ArrayPrinter ); + hb_itemReturnRelease( ArrayPrinter ); - hb_itemRelease( ArrayPrinter ); + hb_itemRelease( pPrinterName ); hb_itemRelease( SubItems ); - hb_itemRelease( File ); - hb_itemRelease( Port ); - hb_itemRelease( Net ); - hb_itemRelease( Driver ); } #endif diff --git a/harbour/contrib/hbwin/win_tprn.prg b/harbour/contrib/hbwin/win_tprn.prg index e07917582a..565cdc1e16 100644 --- a/harbour/contrib/hbwin/win_tprn.prg +++ b/harbour/contrib/hbwin/win_tprn.prg @@ -205,6 +205,8 @@ ENDCLASS METHOD New( cPrinter ) CLASS WIN_PRN ::PrinterName := iif( Empty( cPrinter ), GetDefaultPrinter(), cPrinter ) + /* Initialized with the current properties of the printer [jarabal] */ + ::GetDocumentProperties() RETURN Self METHOD Create() CLASS WIN_PRN