Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

provider

[Resolvido] Impressora é definida como padrão na aplicação em VB

Recommended Posts

Estou imprimindo com o common dialog, mas ao selecionar a impressora a aplicação em VB define a mesma como padrão.

Sei que tem q pegar a impressora padrão e depois voltar, mas está dando erro.

 

Alguém pode me informar como fazer?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, não entendi.

 

A aplicação está definindo a impressora como padrão do windows (para tudo)?

 

Está dando erro? Pode postar o que já fez para olharmos?

Oi Claudio! Obrigado pelo retorno.

 

Quando o VB abre a caixa de seleção de impressora se eu seleciono uma impressora que não é a padrão após a impressão essa impressora se torna a padrão.

 

Tentei fazer o seguinte (Pesquisei essa solução):

 

Private Sub Command1_Click()

CommonDialog1.ShowPrinter
Set ImpressoraPadrão = Printer

For Each Nova_Impressora In Printers
If Nova_Impressora.hDC = CommonDialog1.hDC Then
Set Printer = Nova_Impressora
End If
Next

Printer.Print "Teste!"
Printer.EndDoc
Set Printer = ImpressoraPadrão
	
End Sub

Mas dá um erro na última linha, ou seja, em "Set Printer = ImpressoraPadrão". Erro: Run-time error '13': Type mismatch.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provider, seguinte.

 

Depois de muito brigar aqui, fuçar muito, cheguei a conclusão que esse código que pegou está errado.

 

Primeiro que você nem precisa dessa parte:

For Each Nova_Impressora In Printers
If Nova_Impressora.hDC = CommonDialog1.hDC Then
Set Printer = Nova_Impressora
End If
Next

Pois quando usa o commondialog, ele já seleciona a impressora sozinha, e também a põe como default. Procurei um monte de coisa e não achei nada como evitar isso.

 

Depois, aqui

Set ImpressoraPadrão = Printer
Não está passado nada, por isso quando tenta fazer o inverso dá erro. O nome da impressora não é passado para essa variável.

 

Então procurei alguma forma alternativa de você fazer isso.

 

Uma sugestão que achei, que testei e vi que funciona, e é fácil, é você carregar os nomes de todas as suas impressoras em um combo, ou list, ou onde achar que fique melhor, conforme abaixo:

private sub form_load()

Dim Impressoras As Printer

cboImpressora.Clear

For i = 0 To Printers.Count - 1
		cboImpressora.AddItem Printers(i).DeviceName
Next i

If cboImpressora.ListCount > 0 Then cboImpressora.ListIndex = 0

end sub

private sub cmdImprimir()

For Each Impressoras In Printers
	Set Printer = Impressoras
	If Impressoras.DeviceName = cboImpressora.Text Then Exit For
Next

Printer.Print "Teste!"
Printer.EndDoc

end sub

A desvantagem que achei em utilizar dessa maneira é que você perde as possibilidades de configuração da impressora. Quer dizer, na verdade você não perde, mas tem que fazê-las via código.

Aqui você pode achar todas as possíveis configurações.

 

Te confesso que achei muito estranho o common dialog agir dessa maneira. Ele tem uma propriedade chamada printerdefault, que serve para deixar boolean. Não entendi para que serve, já que quando coloca como false, você pode selecionar a impressora que for, que ele sempre usa a padrão.

 

Bom, só tenho a lhe desejar boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio,

 

Obrigado pela atenção e explicações.

 

Fiz com esse código que você passou e realmente ficou uma boa solução. As outras configurações da impressora fiz via código mesmo. Vou implantar e espero que o usuário goste.

 

Quanto a propriedade printerdefault eu tinha "setado" como false tb e vi q só imprimia na padrão. O que engessa o sistema.

 

Valeu pela força!

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.