Ir para conteúdo
Fórum Script Brasil
  • 0

Enumjob


rodrigotnoma

Pergunta

Estava lendo esse post e fiquei com uma duvida.

http://scriptbrasil.com.br/forum/index.php...pressora+padrão

Devo implementar essa parte:

Dim impressora As Printer

For Each impressora In Printers

Debug.Print impressora.DeviceName

Next

Nesta:

Private Sub Form_Load()

Dim hPrinter As Long, lNeeded As Long, lReturned As Long

Dim lJobCount As Long

OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&

EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned

If lNeeded > 0 Then

ReDim byteJobsBuffer(lNeeded - 1) As Byte

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

If lReturned > 0 Then

lJobCount = lReturned

Else

lJobCount = 0

End If

Else

lJobCount = 0

End If

ClosePrinter hPrinter

End Sub

Como o Graymalkin disse, onde implemento essa parte?

Obrigado

Rodrigo

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

Minha duvida é o seguinte:

Coloquei num Timer isso:

Private Sub Timer1_Timer()

Dim hPrinter As Long, lNeeded As Long, lReturned As Long

Dim lJobCount As Long

OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&

EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned

If lNeeded > 0 Then

ReDim byteJobsBuffer(lNeeded - 1) As Byte

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

If lReturned > 0 Then

lJobCount = lReturned

Else

lJobCount = 0

End If

Else

lJobCount = 0

End If

ClosePrinter hPrinter

Text1.Text = CStr(lJobCount)

If Text1.Text = 1 Then

Form2.Show

End If

End Sub

quando mando imprimir pela impressora default o form2 é mostrado, mas quando escolho outra impressora no momento de imprimir o form2 não é chamado.Sei que é por causa do Printer.DeviceName, mas tem como fazer com que o Form2 seja chamado quando qualquer impressora for utilizada?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado...

Posso fazer isso com

For Each impressora in Printer

Debug.Print impressora.DeviceName

Next

????

Sim, pode. A cada iteração o objeto "impressora" estaria apontando para uma impressora do sistema. Bastaria então passá-lo para OpenPrinter e usar todo aquele código para enumerar os trabalhos de impressão.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

você pode me dizer se assim da?

For Each impressora In Printer

OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&

EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned

If lNeeded > 0 Then

ReDim byteJobsBuffer(lNeeded - 1) As Byte

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

If lReturned > 0 Then

lJobCount = lReturned

Else

lJobCount = 0

End If

Else

lJobCount = 0

End If

ClosePrinter hPrinter

Text1.Text = CStr(lJobCount)

If Text1.Text = 1 Then

Form2.Show

Text1.Text = 0

End If

Next

Ou devo altera mais alguma coisa...

Desculpe a "encheção de saco".

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Graymalkin e amigos....

No form2 que eu chamo na hora de imprimir tem um botao e 3 campos text.

No botao coloquei esse codigo:

Set Cn = New ADODB.Connection

connstring = "provider=microsoft.jet.oledb.4.0;data source=\\192.168.0.120\impressao\impressao.mdb;"

Cn.Open connstring

If (Combo1.Text = "" Or Combo2.Text = "" Or Text1.Text = "") Then

msgbox("Preencher todos os campos")

Combo1.SetFocus

Else

If Combo2.Text = "Monocromatica" Then

impressora = Printer.DeviceName

hora = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)

cliente = Combo1.Text

paginas = Text1.Text

ip = GetIPAddress()

tipo = "m"

Data = Day(Date) & "/" & Month(Date) & "/" & Year(Date)

Set rs = Cn.Execute("insert into tb_impressao(nome,hora,data,cliente,paginas,ip,tipo) values('" & impressora & "','" & hora & "','" & Data & "','" & cliente & "','" & paginas & "','" & ip & "','" & tipo & "')")

MsgBox ("Impressão Cadastrada")

Else

impressora = Printer.DeviceName

hora = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)

cliente = Combo1.Text

paginas = Text1.Text

ip = GetIPAddress()

tipo = "c"

Data = Day(Date) & "/" & Month(Date) & "/" & Year(Date)

Set rs = Cn.Execute("insert into tb_impressao(nome,hora,data,cliente,paginas,ip,tipo) values('" & impressora & "','" & hora & "','" & Data & "','" & cliente & "','" & paginas & "','" & ip & "','" & tipo & "')")

MsgBox ("Impressão Cadastrada")

End If

End If

ReadyToClose = True

Unload Me

Para mim capturar a impressora que vou utilizar e não a padrão, posso fazer do mesmo jeito acima, ou tem outra forma melhor?

E gostaria de obrigar o usuario a preencher todos os campos, caso fosse deixado em branco,o form voltaria a aparecer ou a impressão não seria realizada.Tentei fazer o que esta de vermelho mas não consegui pois assim que dou um OK no botao o programa é encerrado.....

alguém poderia me ajudar?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Tanto no If quanto no Else você está pegando a mesma impressora, ou seja, a impressora padrão do sistema (Printer):

impressora = Printer.DeviceName

O usuário não deveria escolher a impressora?

E, quanto ao programa sair, você está mandando ele fazer isso na linha "Unload Me". Esta linha deveria estar dentro da(s) condição(ões) em que o programa deve realmente sair.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Graymalkin

Não estou escolhendo a impressora, coloquei o seguinte codigo em um Timer com Interval=1000:

For Each impressora In Printer

OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&

EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturned

If lNeeded > 0 Then

ReDim byteJobsBuffer(lNeeded - 1) As Byte

EnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturned

If lReturned > 0 Then

lJobCount = lReturned

Else

lJobCount = 0

End If

Else

lJobCount = 0

End If

ClosePrinter hPrinter

Text1.Text = CStr(lJobCount)

If Text1.Text = 1 Then

Form2.Show

Text1.Text = 0

End If

Next

Assim quando uma impressão é solicitada e o valor de lJobCount for igual a 1 o form2 é chamado.

Será que tem jeito de pegar a impressora utilizada e não a padrão, pois esta pegando apenas a padrão.

quanto o UnloadMe eu entendi sim, mas quando chamo o Form2, a impressão já foi, penso eu que devo controlar isso no codigo que eu coloquei acima, mas não faço ideia onde posso controlar isso.Não sei se da pra fazer isso:

quando solicitar a impressão, antes de iniciar essa impressão,o form2 é chamado e se não for preenchido,ou deixado em branco, a impressão é cancelada, sera que da?

Vlw,obrigadão pela ajuda...

Rodrigo

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, você ainda não entendeu que "Printer" é a impressora padrão e que o objeto "impressora" ali naquele For Each é que varia com as impressoras instaladas no sistema? Por que você continua usando "Printer" no lugar que deveria usar "impressora"?

É esse o problema.

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...