Página 1 de 1

Usar o Win32prn de forma mais inteligente

Enviado: 30 Set 2012 12:53
por lugab
Ola amigos, bom dia e bons votos a todos

Uso a classe Win32prn no [x]Harbour .

Caso 1)

Será que existe uma forma de ao detectar via programa que só existe apenas UMA ÚNICA IMPRESSORA instalada, enviar o relatório diretamente para ela , sem ter que abrir antes a caixa de seleção de impressora , só para fazer o usuário clicar na única impressora que existe ?

Caso 2)
Quando o programa souber que um determinado relatório só deve ser impresso na impressora matricial, é possível disparar a impressão diretamente para ela, sem ter q passar pela caixa de seleção de impressora ?

Grato,

gabriel

Usar o Win32prn de forma mais inteligente

Enviado: 30 Set 2012 13:39
por Imatech
Olá Gabriel !
.
.
.
Caso 01:
WIN_PRINTERLIST(): retorna lista com impressoras instaladas...

Código: Selecionar todos


// Somente 1 impressora instalada
IF LEN( WIN_PRINTERLIST() ) == 1

.
.
.
Caso 02:
Na tela de entrada do programa peça a seleção da impressora matricial...

Código: Selecionar todos


Private cPrinter_Default
// Somente 1 impressora instalada
aPrinters := WIN_PRINTERLIST()

M->cPrinter_Default := aChoice( aPrinters )

.
.
.

Usar o Win32prn de forma mais inteligente

Enviado: 30 Set 2012 14:55
por lugab
Imatech, valeu , muito brigado !

Ja incorporei as dicas no meu soft...

Agora, surgiu mais uma dúvida:

Suponha que existam 3 impressoras, 1 linkjet, 1 laser e 1 LX300, e que o relatorio atual só pode ser impresso na LX300, mas , as vezes, o usuário seleciona a impressora errada e manda o bicho ser impresso na laser.

Tem como resolver isso , ou seja, o programa saber q existe uma lx300 e mandar o relatório direto para ela, sem peassar pela seleção ao usuário ?

Usar o Win32prn de forma mais inteligente

Enviado: 30 Set 2012 16:00
por Imatech
.
.
.
Sugestão: conheça a classe hbHPDF
Vantagens: riquesa de recursos e impressão multiplataforma e preview usando qquer PdfReader
.
.
.
Sua resposta:
Solução para 99% das impressorar matriciais...
.
.
.

Código: Selecionar todos


FUNCTION Main()

Local oPrinter:=Win_Prn():New(Win_PrinterGetDefault())

If ISDOTPRINTER(oPrinter,Win_PrinterGetDefault(),Win_PrinterGetDefault())
   ?'Dot printer - YES'
Else
   ?'Dot printer - NO'
EndIf

RETURN NIL

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( ISDOTPRINTER )
{
HDC hDC = (HDC) hb_parnl(1) ;
LPCSTR pPrinterName = hb_parcx(2) ;
LPCSTR pPort = hb_parcx(3) ;

// Printer can be dot-matrix when number of colors is maximum 16
// and when printer is capable to print only for TRUETYPE
// fonts as graphics (dot-matrix and PCL printers are capable for
that).

if( ( GetDeviceCaps( hDC, NUMCOLORS) <= 16 )
&&( DeviceCapabilities( pPrinterName, pPort,DC_TRUETYPE, NULL, NULL )
== DCTT_BITMAP ) )
   hb_retl(TRUE);
else
   hb_retl(FALSE);
}

#pragma ENDDUMP

Thanks to: Grzegorz

Usar o Win32prn de forma mais inteligente

Enviado: 03 Out 2012 19:53
por lugab
Certo, Imatech, agora é encaixar tudo no programa e botar pra funcionar...

Muito obrigado por tudo...

:{