IMPRESSAO COM O PRINTER?
Boa tarde, pessoal.
Estou modificando a impressão dos meus relatórios que eu fiz com o objeto printer e agora estou precisando imprimir um fundo verde na tabela que crio com o objeto printer, mas todo vez que preencho, os valores ficam por trás do fundo, o que eu estou fazendo de errado?
Antes eu achava que se eu imprimisse primeiro o fundo, depois as tabelas e os dados em seguida, daria certo, mas ocorreu o mesmo problema que acontece se eu imprimir na ordem inversa.
Para desenhar o fundo estou fazendo assim:
Estou modificando a impressão dos meus relatórios que eu fiz com o objeto printer e agora estou precisando imprimir um fundo verde na tabela que crio com o objeto printer, mas todo vez que preencho, os valores ficam por trás do fundo, o que eu estou fazendo de errado?
Antes eu achava que se eu imprimisse primeiro o fundo, depois as tabelas e os dados em seguida, daria certo, mas ocorreu o mesmo problema que acontece se eu imprimir na ordem inversa.
Para desenhar o fundo estou fazendo assim:
Sub desenha_linha(...)
Const sinMM As Single = 567
Printer.FillStyle = 1 '1
Printer.Line ((sinX1 * sinMM), (sinY1 * sinMM))-((sinX2 * sinMM), (sinY2 * sinMM)), lngCor, BF
end sub
Marcelo,
Faça o seguinte teste, crie um projeto novo, coloque em um for um Picture Box. Coloque a propriedade AutoRedraw como True.
Coloque isto no Form_Load()
Irá verificar que ficou por cima do fundo cinza a palavra "Marcelo".
Creio que no Printer o resultado deveria ser o mesmo.
Não existe a possibilidade de vc postar um pouquinho mais do seu código para verificarmos o que pode estar acontecendo ?
Faça o seguinte teste, crie um projeto novo, coloque em um for um Picture Box. Coloque a propriedade AutoRedraw como True.
Coloque isto no Form_Load()
Picture1.FillStyle = 1 '1
Picture1.Line ((1 * sinMM), (1 * sinMM))-((5 * sinMM), (2 * sinMM)), &HE0E0E0, BF
Picture1.CurrentX = 600
Picture1.CurrentY = 600
Picture1.Print "Marcelo"
Irá verificar que ficou por cima do fundo cinza a palavra "Marcelo".
Creio que no Printer o resultado deveria ser o mesmo.
Não existe a possibilidade de vc postar um pouquinho mais do seu código para verificarmos o que pode estar acontecendo ?
Sim, com a picture funciona, eu até faço isso para desenhar o gráfico.
Também acreditava que era para ser igual, mas pelo jeito não é.
O que eu poderia passar a mais do meu código? O que posso fazer é um pequeno teste, no qual faria impressão do fundo e logo em seguida imprimia um texto por cima para ver se funciona, o que acha?
Também acreditava que era para ser igual, mas pelo jeito não é.
O que eu poderia passar a mais do meu código? O que posso fazer é um pequeno teste, no qual faria impressão do fundo e logo em seguida imprimia um texto por cima para ver se funciona, o que acha?
Acho que seria uma boa...
faça igual eu fiz ali com o Picture, porém com o printer.
Em um projeto separado mesmo.
Se funcionar, provavelmente é algum erro na lógica da montagem e tudo mais. Creio que aos poucos você consegue chegar no erro final.
faça igual eu fiz ali com o Picture, porém com o printer.
Em um projeto separado mesmo.
Se funcionar, provavelmente é algum erro na lógica da montagem e tudo mais. Creio que aos poucos você consegue chegar no erro final.
Fiz aqui um exemplo a parte e realmente funciona se eu imprimir primeiro o fundo e depois o texto.
Tentei alterar no meu projeto, mas não funcionou.
Tudo indica que seja por causa dos tab() que eu utilizo, pois se eu fizer sem o tab funciona:
No exemplo acima, o texto que está dentro do IF, é impresso na frente, mas os que tem Tab() não. O que posso fazer?
Tentei alterar no meu projeto, mas não funcionou.
Tudo indica que seja por causa dos tab() que eu utilizo, pois se eu fizer sem o tab funciona:
If intContJ >= bytLeitIniT And intContJ <= bytLeitFimT Then
Printer.Line ((1.2 * 567), (sinY * 567))-((9.15 * 567), ((sinY + 0.4) * 567)), 12777919, BF
Printer.CurrentX = 1.2 * sinMM
Printer.CurrentY = sinY * sinMM
Printer.Print Format$(intContJ, "000");
End If
Printer.Print Tab(12); Format$(intContJ, "000");
Printer.Print Tab(19); Format$(intNLTrat(intContJ - 1), "000");
Printer.Print Tab(26); strHrT(intContJ - 1);
No exemplo acima, o texto que está dentro do IF, é impresso na frente, mas os que tem Tab() não. O que posso fazer?
Olha Marcelo... talvez lhe de um BOM TRABALHO fazer isso, mas vc pode trocar o Tab() pelo Printer.CurrentX.
ou então uma pequena Gambi! rs... se não me engano o Tab() pula cololunas certo? Vc poderia concatenar alguns espaçoes antes do seu texto, algo do tipo...
Só testando mesmo pra ter certeza que vai funcionar.
ou então uma pequena Gambi! rs... se não me engano o Tab() pula cololunas certo? Vc poderia concatenar alguns espaçoes antes do seu texto, algo do tipo...
Printer.Print String(12, " ") & Format$(intContJ, "000");
Printer.Print String(19, " ") & Format$(intNLTrat(intContJ - 1), "000");
Printer.Print String(26, " ") & strHrT(intContJ - 1);
Só testando mesmo pra ter certeza que vai funcionar.
Deu certo aqui com o tab. Só tive que dividir a função que estava muito grande, no qual imprimia, o cabeçalho e os dados das duas colunas. Nisso agora tem uma sub apenas para imprimir os cabeçalhos da tabela e outra sub para imprimir os dados.
Meu problema agora é como fazer para que imprima em ordem crescente os dados, na tabela 1 e depois na tabela 2.
Eu fiz exemplo bem rápido aqui, mas gostaria de opiniões se tem como melhorar:
Antes eu imprimia em ordem crescente pela linha das tabelas, algo como:
Um outro jeito seria imprimir como eu fazia antes, de linha em linha, mas que ficasse em ordem crescente pelas tabelas. O que acham? Seria mais complicado e utilizaria mais variáveis?
Meu problema agora é como fazer para que imprima em ordem crescente os dados, na tabela 1 e depois na tabela 2.
Eu fiz exemplo bem rápido aqui, mas gostaria de opiniões se tem como melhorar:
Dim sinini As Single
Dim sinfim As Single
Dim intCont As Integer
intProd = 0
sinini = sinLineY1_2
For intCont = 0 To 1
sinfim = sinLineY1_2
sinLineY1_2 = sinini
Do While intProd < intTotProd
sinLineY1_2 = sinLineY1_2 + 0.32
strResumo = cIdioma.ReadString("resumoRel", "prodEmp")
strResumo = Replace(strResumo, "\%1", strProduto(intProd))
strResumo = Replace(strResumo, "\%2", lngVolume(intProd) & " " & strUnid(intProd))
strResumo = Replace(strResumo, "\%3", strEmpresa(intProd))
If intProd < CInt((intTotProd / 2) + 0.5) Then
Call printTexto(0.7, sinLineY1_2, "Tahoma", 8, False, strResumo)
Else
Call printTexto(9.5, sinLineY1_2, "Tahoma", 8, False, strResumo)
End If
intProd = intProd + 1
If intProd = CInt((intTotProd / 2) + 0.5) Then Exit Do
Loop
Next intCont
sinLineY1_2 = sinfim
Antes eu imprimia em ordem crescente pela linha das tabelas, algo como:
001 002
003 004
005 006
Um outro jeito seria imprimir como eu fazia antes, de linha em linha, mas que ficasse em ordem crescente pelas tabelas. O que acham? Seria mais complicado e utilizaria mais variáveis?
Alguém? Só uma opinião, pessoal.
Da uma olhada aqui...
http://www.macoratti.net/printer.htm
flw
http://www.macoratti.net/printer.htm
flw
Vlw, Silver. Mas eu queria mesmo uma opinião, sobre qual seria a melhor forma de imprimir uma tabela em duas colunas.
No caso, eu até fiz um exemplo acima, no qual eu utilizo um laço para imprimir a tabela da esquerda e depois volta para a posição de inicio da tabela da esquerda para imprimir o restante dos dados na tabela da direita.
Essa seria a melhor maneira ou seria melhor eu ir imprimindo as duas tabelas ao mesmo tempo, linha por linha?
No caso, eu até fiz um exemplo acima, no qual eu utilizo um laço para imprimir a tabela da esquerda e depois volta para a posição de inicio da tabela da esquerda para imprimir o restante dos dados na tabela da direita.
Essa seria a melhor maneira ou seria melhor eu ir imprimindo as duas tabelas ao mesmo tempo, linha por linha?
Acho melhor imprimir as 2 ao mesmo tempo linha por linha..
Tópico encerrado , respostas não são mais permitidas