rodrigotnoma Postado Outubro 11, 2006 Denunciar Share Postado Outubro 11, 2006 Estava lendo esse post e fiquei com uma duvida.http://scriptbrasil.com.br/forum/index.php...pressora+padrãoDevo implementar essa parte:Dim impressora As Printer For Each impressora In Printers Debug.Print impressora.DeviceName NextNesta: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 SubComo o Graymalkin disse, onde implemento essa parte?ObrigadoRodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 12, 2006 Denunciar Share Postado Outubro 12, 2006 O meu segundo post daquele tópico explica onde deve ser mudado. Só que, é claro, depende do que você quer exatamente.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 Minha duvida é o seguinte:Coloquei num Timer isso:Private Sub Timer1_Timer()Dim hPrinter As Long, lNeeded As Long, lReturned As LongDim lJobCount As LongOpenPrinter Printer.DeviceName, hPrinter, ByVal 0&EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturnedIf lNeeded > 0 ThenReDim byteJobsBuffer(lNeeded - 1) As ByteEnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturnedIf lReturned > 0 ThenlJobCount = lReturnedElselJobCount = 0End IfElselJobCount = 0End IfClosePrinter hPrinterText1.Text = CStr(lJobCount)If Text1.Text = 1 ThenForm2.ShowEnd IfEnd Subquando 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Dentro do timer, faça um loop percorrendo todas as impressoras e usando o código acima para cada uma delas.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 Obrigado...Posso fazer isso comFor Each impressora in PrinterDebug.Print impressora.DeviceNameNext????Ou você faria como?ObrigadoRodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Obrigado...Posso fazer isso comFor Each impressora in PrinterDebug.Print impressora.DeviceNameNext????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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 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 IfNextOu devo altera mais alguma coisa...Desculpe a "encheção de saco".Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Só falta alterar uma coisa aí e eu disse o que é na última frase do meu post anterior. Leia novamente. Ah, e é Printers (no plural) na linha do For Each.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 você diz isso:OpenPrinter impressora.DeviceName, hPrinter, ByVal 0&???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Exatamente. Você entendeu o por quê?Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 Até tinha feito isso, mas deu esse erro e pensei que estivesse errado:"Object doesn't support this property or method"??????Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 13, 2006 Denunciar Share Postado Outubro 13, 2006 Até tinha feito isso, mas deu esse erro e pensei que estivesse errado:"Object doesn't support this property or method"??????Você corrigiu aquele "Printer" para "Printers"? De qualquer maneira, poste aqui o código todo para eu dar uma olhada.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 Aeeeeeeeeeeeee GrayDeu certo cara, vlw mesmo.....Tenho mais algumas dúvidas, mas para isso irei criando os topicos separados....Vlw mesmo, obrigadao pela ajuda.Rodrigo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 13, 2006 Autor Denunciar Share Postado Outubro 13, 2006 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.Connectionconnstring = "provider=microsoft.jet.oledb.4.0;data source=\\192.168.0.120\impressao\impressao.mdb;"Cn.Open connstringIf (Combo1.Text = "" Or Combo2.Text = "" Or Text1.Text = "") Then msgbox("Preencher todos os campos")Combo1.SetFocusElse 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 IfEnd IfReadyToClose = TrueUnload MePara 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 14, 2006 Denunciar Share Postado Outubro 14, 2006 Tanto no If quanto no Else você está pegando a mesma impressora, ou seja, a impressora padrão do sistema (Printer):impressora = Printer.DeviceNameO 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 15, 2006 Denunciar Share Postado Outubro 15, 2006 GraymalkinNão estou escolhendo a impressora, coloquei o seguinte codigo em um Timer com Interval=1000:For Each impressora In PrinterOpenPrinter Printer.DeviceName, hPrinter, ByVal 0&EnumJobs hPrinter, 0, 99, 1, ByVal 0&, 0, lNeeded, lReturnedIf lNeeded > 0 ThenReDim byteJobsBuffer(lNeeded - 1) As ByteEnumJobs hPrinter, 0, 99, 1, byteJobsBuffer(0), lNeeded, lNeeded, lReturnedIf lReturned > 0 ThenlJobCount = lReturnedElselJobCount = 0End IfElselJobCount = 0End IfClosePrinter hPrinterText1.Text = CStr(lJobCount)If Text1.Text = 1 ThenForm2.ShowText1.Text = 0End IfNextAssim 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...RodrigoObrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Outubro 15, 2006 Denunciar Share Postado Outubro 15, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rodrigotnoma Postado Outubro 16, 2006 Autor Denunciar Share Postado Outubro 16, 2006 Opa, ali foi erro meu na hora de postar, entendi sim que devo usar impressora no lugar de Printer....e já estou usando... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
rodrigotnoma
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
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.