Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

dianaemanuel

Imprimir Form

Mensagens Recomendadas

dianaemanuel

Boa tarde,

Eu sou aspirante em vb, e estou a trabalhar com o vb 2010 beta2.

Eu tenho uma dúvida relativamente á impressão de forms. Estou a desenvolver uma aplicação sobre contabilidade, e quero imprimir um form que contém um balanço, eu criei um botão imprimir e quando eu clico no botão ele imprime-me o form mas só imprimo aquilo que eu visualizo, e o form não pode ser todo visualizado no ecrã do pc, a minha dúvida é como faço para que eu consiga imprimir o form todo numa folha A4 mesmo aquilo que não está visivel.

Nota: Se eu colocar o programa a correr num monitor maior já é possivel ver o form todo como também imprimi-lo todo, mas no ecrã que tou a trabalhar não.

Vou colocar o código que estou a utilizar para imprimir o form:

Vou colocar aqui o código que estou a usar para a impressão

'Variáveis 
Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
ByVal dwRop As System.Int32) As Long

Dim memoryImage As Bitmap

‘Código Botão Imprimir
Private Sub btnImprimir_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click
btnImprimir.Visible = False
btnsair.Visible = False

Dim result As DialogResult
PrintDialogBalanço.ShowDialog()

If result = Windows.Forms.DialogResult.OK Then
PrintDocumentBalanço.Print()
End If

PrintDocumentBalanço.DefaultPageSettings.Landscape = True

CaptureScreen()

PrintDocumentBalanço.DocumentName = "Balanço"

PrintDocumentBalanço.Print()
btnImprimir.Visible = True

btnsair.Visible = True

End Sub

‘Código do PrintDocumento
Private Sub PrintDocumentBalanço_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocumentBalanço.PrintPage

e.Graphics.DrawImage(memoryImage, New Rectangle(0, 0, 900, 800), New Rectangle(0, 0, 1700, 1070), Drawing.GraphicsUnit.Pixel)

End Sub

‘Código Capturar Form
Private Sub CaptureScreen()

Dim mygraphics As Graphics = Me.CreateGraphics()
memoryImage = New Bitmap(Me.Width, Me.Height, mygraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
Dim dc1 As IntPtr = mygraphics.GetHdc
Dim dc2 As IntPtr = memoryGraphics.GetHdc

BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
mygraphics.ReleaseHdc(dc1)
memoryGraphics.ReleaseHdc(dc2)

End Sub

Eu estou a utilizar o printdocument, o printdialog e o printform, mas o printform eu não estou a utilizá-lo até ao momento.

Eu queria mesmo muito conseguir fazer isto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Olá e bem-vinda.

Em primeiro lugar, ninguém quer saber se é urgente ou não. Ninguém tem de se preocupar a não ser tu mesma.

Vamos deixar os "urgentes" de parte em futuros posts, pois eles não representam acréscimo nenhum para a compreensão ou resolução do teu problema.

Em segundo lugar, não deves usar caracteres especiais para escrever código (como "Balanço").

Nunca.

Último, mas não menos importante: tens algum conhecimento de Crystal ou Microsoft Reports ?

A ideia de "imprimir forms" é errada. O output de impressão deve ser desenhado específicamente para sair na impressora, e de preferência que seja gerado na altura em que recebe ordem de impressão.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

ok, obrigado pelos conselhos.

Relativamente à dúvida, eu conheço os cristal reports mas o objectivo para este projecto que estou a desenvolver não era utilizar o cristal reports, mas sim imprimir através do form.

Não existe solução para este problema?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Existe. Antes de mais, o PrintDocument possui uma função chamada "PrintPreview" e daí, já podes tirar as tuas conclusões. Será bom procurares um pouco, pois esta função vai-te dar uma visualização do que irá ser o print.

No entanto, para conseguires imprimir apenas o que queres, não vais precisar só dessas linhas de código, pois tu aí não estás a estipular quais os dados que serão imprimidos.

Vasculha pelo google, vais encontrar o que te falo.  :D

bioshock

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

Relativamente à dúvida, eu conheço os cristal reports mas o objectivo para este projecto que estou a desenvolver não era utilizar o cristal reports, mas sim imprimir através do form.

Não existe solução para este problema?

Podes descarregar o Visual Basic PowerPacks e utilizar o componente PrintForm.

Vê este exemplo: http://msdn.microsoft.com/en-us/library/bb629268.aspx

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Olá,

Eu já estou a utilizar o printform e encontrei uma linha de código que é capaz de mostrar o todo o form:

Me.PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter

Me.PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)

Eu andei a pesquisar e este comando o que faz é imprimir aquilo que não está visivel no form, mas o problema é que não está a fazer isso, e eu já não sei o que hei de fazer mais. O meu form tem de tamanho Width 1700 e Height 1070.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Lembrei-me de um post que fiz há uns tempos. Vê lá se te entendes, novamente, com o PrintDocument:

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=264981

Volto a tocar nisto porque imprimir forms não me parece correcto.

Consegues fazer uma folha toda bonita com toda a informação de que precisas nos sítios adequados.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Lembrei-me de um post que fiz há uns tempos. Vê lá se te entendes, novamente, com o PrintDocument:

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=264981

Volto a tocar nisto porque imprimir forms não me parece correcto.

Consegues fazer uma folha toda bonita com toda a informação de que precisas nos sítios adequados.

Tive a ver o post de que me falou e já coloquei no programa mas também não funcionou.

Acho que já sei qual é o problema, é que o meu form tem mais de 800px e por isso é que não dá para imprimir todo, porque se eu colocar o programa a correr num pc com um monitor maior quando mando imprimir o form ele já impime tudo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O meu post não serve para imprimir forms.

Servia para sugerir que desenhasses tu própria o output dos dados.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

O meu post não serve para imprimir forms.

Servia para sugerir que desenhasses tu própria o output dos dados.

Sim, eu percebi. Mas não resolveu na mesma.

Por isso vou deixar como está.

Obrigado pelo esclarecimento.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Gooden

Sim, eu percebi. Mas não resolveu na mesma.

Por isso vou deixar como está.

Obrigado pelo esclarecimento.

Não achas melhor aprenderes a fazer correctamente? nós estamos aqui disponíveis para ajudar (Não Fazer) naquilo que precisares.

Agora se preferes não aprender isso já não é connosco.

Um concelho aqui toda a gente é ***** (5 Estrelas), o ribeiro55 é muito bom e está sempre pronto a ajudar.

Por tanto alguma dúvida fazes um post com o código e explicas a situação e onde está a dar erro. E nós faremos o máximo para te ajudar! =)

Edit:

Mais 1 concelho não metas urgente nos Post's... Eu e a maior parte das pessoas não gosta disso :S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Não achas melhor aprenderes a fazer correctamente? nós estamos aqui disponíveis para ajudar (Não Fazer) naquilo que precisares.

Agora se preferes não aprender isso já não é connosco.

Um concelho aqui toda a gente é ***** (5 Estrelas), o ribeiro55 é muito bom e está sempre pronto a ajudar.

Por tanto alguma dúvida fazes um post com o código e explicas a situação e onde está a dar erro. E nós faremos o máximo para te ajudar! =)

Edit:

Mais 1 concelho não metas urgente nos Post's... Eu e a maior parte das pessoas não gosta disso :S

Mas eu não estou a desistir eu já percebi é onde está o problema, e o problema é eu ter um form superior a 800px e por isso é impossivel mandá-lo imprimir de um portátil pois tem o ecrã pequeno mas se eu mandar imprimir num pc com ecrã maior já é possivel imprir o form todo.

O código que utilizei foi o seguinte:

Me.PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = True
        Me.PrintForm1.DocumentName = ""
        Me.PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Bottom = 2
        Me.PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Left = 2
        Me.PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Right = 2
        Me.PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Top = 2

        
        Me.PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
        Me.PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
        Me.Refresh()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Esquece a impressão do form! Não é praticável!

Com o PrintDocument podes literalmente desenhar o que queres que saia na impressora.

Penso que continuas a baralhar o conceito e por isso eu próprio te escrevo a definição para o PrintDocument se mostrares os dados que queres imprimir (um screenshot é suficiente).

Desta forma vais entender o que quero dizer e para a próxima já fazes os teus próprios relatórios :)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Esquece a impressão do form! Não é praticável!

Com o PrintDocument podes literalmente desenhar o que queres que saia na impressora.

Penso que continuas a baralhar o conceito e por isso eu próprio te escrevo a definição para o PrintDocument se mostrares os dados que queres imprimir (um screenshot é suficiente).

Desta forma vais entender o que quero dizer e para a próxima já fazes os teus próprios relatórios :)

Mas eu precisava mesmo era da impressão do form, porque eu estou a fazer um projecto de estágio e estou a desenvolver uma aplicação sozinha e o meu chefe queria que eu imprimisse os dados de um form, e o meu estágio acaba hoje.

Mas para a próxima se me mandarem fazer o mesmo já sei que não é o mais aconselhável fazer, a melhor opção é os reports.

Obrigado pelos conselhos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Penso que continuas a baralhar o conceito e por isso eu próprio te escrevo a definição para o PrintDocument se mostrares os dados que queres imprimir (um screenshot é suficiente).

Então no meu form tenho dados relativamente a Valores, sendo eles, Activo, Passivo, Capital Proprio, total Activo, Total Passivo e total Capital Proprio e passivo.

O form tem o desenho de um Balanço, pa ter uma ideia daquilo que pretendo, tem muitas labels e muitas caixas de texto, conectadas com a base de dados.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não interessa quantas coisas estão por detrás.

Se todas as caixas tiverem os valores correctos na altura em que dás ordem de impressão, é suficiente para apanhar tudo e fazer um relatório.

Pedi o screenshot porque é mais fácil de ver o que querias que saísse na impressora, dado que estás disposta a imprimir o form.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Não interessa quantas coisas estão por detrás.

Se todas as caixas tiverem os valores correctos na altura em que dás ordem de impressão, é suficiente para apanhar tudo e fazer um relatório.

Pedi o screenshot porque é mais fácil de ver o que querias que saísse na impressora, dado que estás disposta a imprimir o form.

Como é que eu insiro aqui a imagem? É que não estou a conseguir.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Usa um serviço de hosting temporário como o imageshack, copia para aqui o link, selecciona-o todo e carrega no botãozinho com a mini Gioconda aí em cima. A ideia é fechar o endereço em tags IMG


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Quantas rubricas, incluíndo os subtítulos a negrito, são?

Pergunto porque parece que o form ainda tem scroll.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Quantas rubricas, incluíndo os subtítulos a negrito, são?

Pergunto porque parece que o form ainda tem scroll.

Tem o que está visivel mais 5 caixas de texto e mais 4 rubricas apenas. As linhas também é importante referir?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não, só os itens.

E já agora, queres tentar meter isto em landscape? É capaz de ficar apertadinho.

Se pudessem sair duas folhas com os itens corridos seria muito mais fácil.

Se não puderem, também se arranja, mas não posso fazer agora. Leva mais tempo.

EDIT: Acho que também podia sair uma só folha com os itens corridos, mas a letra era capaz de ficar muito pequenina.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dianaemanuel

Não, só os itens.

E já agora, queres tentar meter isto em landscape? É capaz de ficar apertadinho.

Se pudessem sair duas folhas com os itens corridos seria muito mais fácil.

Se não puderem, também se arranja, mas não posso fazer agora. Leva mais tempo.

Podem ficar em duas folhas mas eu preferia que fosse tudo numa única folha e por isso é que tinha utilizado o landscape.

Ok, não tem problema, eu quero é ver como se faz assim para a próxima já sei como fazer.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
paulo silva

Boas.

Sempre poderias imprimir em A3.

Falando no método que queres usar compreendo a falta de tempo, por experiência própria, mas aprendi também que fazer as coisas para "desenrascar" nem sempre dá o melhor resultado. Se tens o visual studio 2010 não seria difícil trabalhares com o reports view. mas o print document também não deixa de ser bom.

Eu à uns tempos estava com dificuldade em encontrar uma ferramenta para reports e pesquisei muito entre gratuitos e pagos e encontrei uma alternativa que a mim se adequa  muito bem ItextSharp.dll esta dll é muito boa é free gera-nos um documento pdf e apartir dai podemos imprimir salvar o arquivo dinamicamente no servidor e o ir consultar mais tarde. muito bom

Cumprimentos Paulo Silva

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.