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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user